Charles的安裝破解與https抓包完整指引(含VPN解決方案)
Charles的安裝與破解
app抓包工具在Mac常用Charles,window用fiddler,
本文詳細介紹Charles安裝破解以及配合手機抓取https資訊的使用方法,所有步驟均本人親測
(本文以window環境/iOS手機為例,Mac步驟類似)
首先下載Charles:
描述:
此工具用於生成破解後的charles.jar檔案
用法:
輸入RegisterName(此名稱隨意,用於顯示 Registered to xxx),選擇本地已安裝的版本,點選生成,並下載charles.jar檔案
替換本地charles.jar檔案
macOS: /Applications/Charles.app/Contents/Java/charles.jar
Windows: C:\Program Files\Charles\lib\charles.jar
也可直接使用下方提供的註冊碼:
// Charles Proxy License
// 適用於Charles任意版本的註冊碼,誰還會想要使用破解版呢。
// Charles 4.2目前是最新版,可用。
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
點選help-register 若已註冊則顯示如下示例:( 此時,重啟charles,檢視已經破解)
設定抓取http協議
設定charles, Proxy->Proxy setting,就可以抓取http協議了(預設不用更改)
下圖為一些常用按鈕,
進行手機端的設定操作(Android/iOS)
首先手機和pc端連結同一wifi,注意: 必須是同一wifi;
在手機端連的wifi選擇高階設定-選擇手動配置代理,伺服器為電腦的IP,埠號為上方設定的8888
電腦端IP獲取辦法自行百度,或者在Charles選擇Help-Local IP Address檢視
(下圖以iOS為例)
Android機型設定代理大致流程如下,長按當前wifi-修改網路-顯示高階選項-手動代理(依據手機不同可能有少許不同,本圖以榮耀v8為例)
在手機初次通過Charles抓取網路時會出現如下 ,選擇同意
至此,Charles已可以抓取手機端普通的http請求
https的協議抓包
安裝SSL證書到手機裝置,點選 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device
按照提示
在手機Safari瀏覽器輸入地址 chls.pro/ssl,出現證書安裝頁面,點選安裝,(會輸入密碼,一定要點選安裝,並且設定為信任,會出現下圖驗證圖示)
注:在iOS端 10.0以上的系統有可能抓包失敗,一定要進行如下設定!!!
安裝完成後,在 設定→通用→關於本機→證書信任設定,裡面啟用完全信任Charles證書
在Android端瀏覽器訪問chls.pro/ssl地址後安裝證書如下:(注: Android7.0以上機型因為安全機制可能無法監聽https,須app程式碼端設定支援!!!)
此時要自己寫證書名稱,一定要設定密碼(自己記住);
最後一步:Charles端設定需要監聽的https host:
選擇proxy-ssl proxying setting 此處可用*代替不明欄位,如 *:443代表抓取所有https介面資訊
另外,在電腦上安裝證書如下,一直同意就行:
至此,Android手機及iOS手機均可抓取https資料
Charles常用的方法及技巧請自行百度,本文不再介紹
下圖為對https抓包成功的截圖:
注: 用Charles代理抓取https資料可能導致某些加密層級較高的軟體如法使用(如iOS的App Store和Android的應用市場,若使用 關閉代理即可)
注: 某些app部分https的資料仍可能抓取不成功因為採用了內部資料加密或其他資料反破解方法(如微信等),需要原APP的專業證書加入到Charles才行
Charles抓不到包的處理方法總結
報錯:SSLHandshake: Received fatal alert: unknown_ca
1.檢查模擬器是否裝了chales證書.
安裝地址: www.charlesproxy.com/getssl / 或者 chls.pro/ssl
使用safari(必須系統自帶瀏覽器)開啟這個網址.並安裝證書.
2.檢查手機是否勾選chals證書:
設定路徑: 手機 -> 設定 -> 通用 -> 關於本機 -> 證書信任設定(拉到底) -> 勾選Charles Proxy CA
3.檢查手機是否信任charles證書
設定路徑: 手機 -> 設定 -> 通用 -> 描述檔案與裝置管理(拉到底) -> 信任charles 證書
4.檢查你是否開了VPN(翻牆軟體)
翻牆軟體會修改你的網路配置
關閉VPN重新開啟charles即可.
5.那如果是在使用VPN的情況下想抓取境外app的資料呢?
請看下文:(環境:本用例使用Lantern VPN, Windows Charles,已實測)
關於在使用翻牆軟體VPN下抓取境外APP的https資料
參照上文,在能對國內HTTPS環境能夠抓取後
對Charles如下配置: 開啟
翻牆埠號的獲取如下:(以lantern為例 ,使用shadowsocks方法類似,有的還需要填寫domain和password):
開啟設定-高階設定:將此host和埠號填入上圖Charles的位置,至此Charles已具備翻牆能力
然後像正常抓取HTTPS那樣抓取資料即可
補充:
關於Charles的一些使用技巧及日常問題的解決
tips小技巧:
一般會抓取大量http/https資料,可通過選中關注的網址-focus 來過濾掉其他資訊
Maplocal修改返回資料
開發時需要測試某個資料為臨界值時.app顯示是否會正常.
1.儲存介面返回的資料到本地檔案
找到你想修改的url -> 右擊 -> Save Response -> 填寫檔名(如response.text)
2.將介面與本地資料建立連結
找到剛才的url -> 右擊-map local -> 貼上剛才複製的url到Host
Protocol / Host / Port / Path都會自動填充.
我們只要把Query裡的資料刪除即可(必須刪除).點選OK就可以了.
3.開啟剛才你儲存在本地的檔案response.text.修改你想修改的資料.Alt+s
儲存一下.
4.這時候app再請求這個介面的時候.返回的資料就是你修改的本地資料了.
rewrite修改http返回碼
有時候我們需要模擬介面訪問失敗的情況.就要修改Http返回碼.
1.獲取你想修改的介面的URL
在Charles裡找到你想修改的url -> 右擊該url -> Copy URL
即可獲取該url.如圖.
2.開啟Rewrite功能
開啟Charles -> 工具欄 -> Tools -> Rewrite
8
3.設定選項
3.1.勾選Enable Rewrite.
3.2.勾選Debug in Error log
9
3.3.點選Locations裡Add
按鈕(上圖5)
Protocol設定為Http或者Https(視你的介面而定)
Host: 為你剛才複製的Url的Host.
Path: 為你剛才複製的Url的path
Port 和 Query 都留空.(一定要留空)
註釋:什麼是Host 和 Path
如該介面: https://www.baidu.com/x/v2/show?platform=ioswww.baidu.com
就為Host./x/v2/show
即為Path(?
之前Host
之後即為Path)
(5).點選Rules裡的Add
按鈕(上圖6)
Type 選項選擇
Response Status
Match 欄裡的Value
填寫200
Replace 欄裡的Value
填寫 你想修改成的返回碼.如404
Mocky用法:
Mocky是一個可以自己生成一個Api.並且可以自定義Status Code. Body的網站.
HTTP返回碼總結
狀態碼 | 類別 | 原因 |
---|---|---|
1xx | information-資訊狀態碼 | 接收的請求正在處理 |
2xx | success-成功狀態碼 | 請求正常處理完畢 |
3xx | redireaction-重定向狀態碼 | 每次請求中使用重定向不要超過5次 |
4xx | client error-客戶端錯誤狀態碼 | 表示請求可能出錯,伺服器無法處理請求 |
5xx | server error-伺服器錯誤狀態碼 | 伺服器本身的錯誤,而不是請求出錯 |
狀態碼 | 英文名稱 | 說明 |
---|---|---|
100 | continue | 客戶端必須繼續發出請求 |
101 | switching protocols | 客戶端要求伺服器根據請求轉換http協議版本 |
200 | ok | 請求成功 |
201 | created | 伺服器已經建立了文件,location頭給出了他的url |
202 | accepted | 接收和處理,但處理還未完成 |
203 | non-authoriative information | 返回資訊不確定或不完整 |
204 | no content | 伺服器成功處理了請求,但沒有返回任何內容 |
205 | reset content | 伺服器完成了請求,使用者代理必須復位當前已經瀏覽過的檔案 |
206 | partial content | 伺服器已經完成了部分使用者的get請求 |
300 | multiple choices | 請求的資源可在多處得到 |
301 | moved permanently | 刪除請求資料 |
302 | found | 在其他地址發現了請求資料 |
303 | see other | 建議客戶端訪問其他url或換成其他訪問方式 |
304 | not modified | 客戶端請求成功.但檔案未變化 |
305 | use proxy | 請求的資源必須從伺服器指定的地址得到 |
307 | temporary redirect | 申明請求的資源臨時性刪除 |
400 | not found | 客戶端請求的語法錯誤,伺服器無法解析 |
401 | unauthorized | 請求授權失敗 |
402 | payment granted | 保留有效的charge to頭響應 |
403 | forbidden | 請求不允許 |
404 | not found | 伺服器無法根據客戶端的請求找到資源 |
405 | method not allowed | 使用者在request-line欄位定義的方法不允許 |
406 | not acceptable | 根據使用者傳送的accept.請求資源不可訪問 |
407 | proxy authentication required | 型別401,使用者必須首先在代理伺服器上得到授權 |
408 | request time out | 客戶端沒有在使用者指定的時間內完成請求 |
409 | conflict | 對當前資源狀態,請求不能完成 |
410 | gone | 伺服器上不再有此資源且無進一步的參考地址 |
411 | length required | 伺服器拒絕使用者自定義的content-length屬性請求 |
412 | precondition failed | 一個或多個請求頭欄位在當前請求中錯誤 |
413 | request entity too large | 請求的資源大於伺服器允許的大小 |
414 | request-url too large | 請求的資源url鯧魚伺服器允許的長度 |
415 | unsupported media type | 請求資源不支援請求專案的格式 |
416 | requested range not satisfiable | 請求中包含range請求頭欄位,在當前請求資源範圍內沒有range指示值,請求也不包含if-range請求頭欄位 |
417 | expectation failed | 伺服器不滿足請求expect頭欄位指定的期望值,如果是代理伺服器,可能是下一級伺服器不能滿足請求 |
500 | internal server error | 伺服器內部錯誤,無法完成請求 |
501 | not implemented | 伺服器不支援請求的函式 |
502 | bad geteway | 伺服器暫時不可用,有時是為了防止發生系統過載 |
503 | service unavailable | 伺服器過載或暫停維修 |
504 | geteway timeout | 關口過載,伺服器使用另一個關口或服務來響應使用者,等待時間設定值較長 |
505 | http version not supported | 伺服器不支援或拒絕支援請求頭中指定的http版本 |
模擬慢網速
在開發的時候.有時需要測試在網速差的時候app是否正常.
1.Charles工具欄-Proxy-Throttle Setting
2.選中Enable Throttling
3.選擇Throttle preset為56 kbps Modem
.他就會自動將Bandwidth設定為57.6kb/s.這個即你現在的下載速度.如果你覺得還不夠慢.可以將他修改的更小.