1. 程式人生 > >Charles的安裝破解與https抓包完整指引(含VPN解決方案)

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=ios
www.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.這個即你現在的下載速度.如果你覺得還不夠慢.可以將他修改的更小.