Charles簡介:
Charles是一款抓包神器,因為他是基于 java 開發的,所以跨平臺,Mac、Linux、Window下都是可以使用的,確保安裝之前已經安裝了JDK。Charles官網地址:https://www.charlesproxy.com
破解:
因為這款軟件是收費的,只有30天的免費使用期限,不過不付費用戶仍然可以繼續使用,只是每次使用時間不能超過30分鐘,且啟動會有10秒的延時,但是還是可以湊合使用的。當然你也可以參照下面的方法進行破解,可能是新版本的原因,我親自測試多次未成功,期待新的破解方式。
以下附上之前版本的破解方法:(要下載對應版本的 .jar 文件,網上百度下即可)
基本使用:
一. 抓取 HTTP 請求
-
Mac上抓取
-
將 Charles 設置成系統代理
打開Charles之后。默認就對系統設置了代理,點擊Charles菜單欄,選中 Proxy 菜單,勾選上 macOS Proxy ,已經勾選就不再設置,如下圖所示:
2017-03-21 下午4.00.55.png-
設置支持 http 請求抓取
在Proxy 菜單,選中Proxy Settings ,打開對話框,設置端口號(默認是8888,也可以自定義),并選中 Enable transparent Http proxying 選項,如下圖所示:
2017-03-21 下午4.06.47.png2017-03-21 下午4.06.52.png -
發起HTTP請求
此時就能在Charles中看見效果:8BD82F6A-3C1A-4B6F-A270-3FEA8F69E342.png3333.png
Filter 可以對請求進行過濾,并且支持通配符,下面會講到
-
-
手機上抓取
-
找到Mac的IP地址
系統偏好設置->網絡 即可找到當前的IP地址:BEC42872-FAD9-4471-A84A-C3FD1DE31107.png5854198A-F3D2-4BEB-8F70-60AC2822E46A.png2017-03-21 下午4.32.09.png2017-03-21 下午4.32.18.png -
在iPhone中設置
在你的iPhone->設置->無線局域網,選中當前使用的WIFI,下拉至 HTTP代理處,選擇手動,服務器行輸入Mac上的IP地址,端口填8888即可,具體如下:
97929803-C237-4AEC-BA9C-A199020F5D77.png -
打開iPhone中的APP(有網絡請求的),這時會看見Charles中已經攔截到數據了
屏幕快照 2017-03-21 下午5.10.28.png
注意:
當我們不抓包的時候,會將Charles關閉,這時候iPhone設備是訪問不到網絡的,因為設置了代理(就是Charles),這時候要將iPhone的代理關閉
-
二. 抓取 HTTPS 請求
Charles不僅能夠抓取http協議的包,也能抓取https協議的包,但是由于https是經過加密的,因為抓取的包中的內容是以密文方式展現的,通過配置Charles的SSL可以方便的以明文查看https協議傳輸的內容
-
安裝證書
-
Mac上安裝證書
選中Charles,在“Help”菜單中選擇—>“SSL Proxying”—>“Install Charles Root Certificate”會自動打開鑰匙串訪問窗口:676E2647-22D4-4C21-AEC3-D7DC9964242B.png
2017-03-21 下午5.14.01.png2017-03-21 下午5.15.01.png2017-03-21 下午5.15.15.png2017-03-21 下午5.15.39.png0FD746DA-84BB-460E-89FB-B5BEDD83B491.png-
iPhone上安裝證書
iPhone上也要安裝SSL證書,可以通過鏈接https://www.charlesproxy.com/documentation/additional/legacy-ssl-proxying/ 下載傳到iPhone上,或者使用iPhone的Safari直接訪問鏈接,下載對應的證書,然后安裝即可。
點擊紅色部分下載:
F2D9E8E6-6833-493C-947F-74983CBA4DB1.png19C31D21422B0AF12F11269FF3C9F744.png2139C62B3ED8223E2B7DBFB8E8AD980B.png06F7E9DCA3434F51B3D6B1E7ED785D5B.png
最后點擊完成即可!
-
-
配置SSL
選中Charles,在“Proxy”菜單中選擇—>“SSL Proxying Settings ”即可彈出頁面:
2017-03-21 下午5.37.30.png2017-03-21 下午5.19.07.png也可以在host中輸入: " * " 匹配所有,默認https端口號為:443, 如下所示:
1479259184165591.jpg1479259195476646.jpg然后就能以明文方式查看https傳輸的詳情了:
D539596D-83E8-4C3A-B833-B987415738FB.png
過濾網絡請求
-
通過Filter過濾
在 Filter 欄中輸入想要過濾出來的關鍵字,比如只想查看包含關鍵字:baidu 的請求,只需要在 Filter 欄中輸入關鍵字:baidu 即可;當然也支持通配符,比如我們想要查看包含關鍵字:itunes,并且以 .com 結尾的請求,只需要在 Filter 欄中輸入 itunes..com* 即可,如下圖所示:
FB6F6B0C-A1A0-4CF1-B1A1-0FBD1461CFA4.png -
通過Include過濾
可以通過 “Proxy”->“Recording Settings”,選中 Include 欄,添加一項, 設置需要抓取的包,比如我只想抓取 www.baidu.com 域名下的請求,可以按照如下設置:
屏幕快照 2017-03-22 上午10.47.14.png -
總結
Filter 和 Include 的區別就是: Include 是只抓取符合要求的請求,不符合的請求就不再抓取,而 Filter 只是將先要抓取的請求篩選出來,但是還是去抓取了所有的請求;綜合兩者我們可以按照自己的需求進行設置如何篩選
模擬慢速網絡
有時候開發中需要測試用戶在網絡情況比較的差的時候應用的表現情況,可以使用Charles限流設置,"Proxy" -> "Thorttle Settings" 中設置如下:
或者只針對某些域名進行設置,如下針對特定Hosts的設置:
重放和編輯
點擊一個請求,右擊彈出菜單欄,我們可以進行各種操作,比如復制、保存、編輯、重復請求等等,我們可以編輯修改任意請求信息,比如URL地址、端口、參數等等,點擊“Execute”按鈕即可發送修改后的請求:
通過 Repeat Advanced 高級重放功能可以作為簡單的性能測試,可以設置重復次數、并發數以及延時等:
其他功能(待完善)
-
Breakpoints - 斷點功能
有時候對于一些特殊請求在發往服務器之前想要修改一些參數,或者在服務器響應完成之后修改響應信息,此時可以使用Charles的斷點功能,類似Xcode中的斷點調試,設置斷點之后,當有網絡請求的時候Charles會自動跳轉到斷點處,此時我們就能進行相關的修改,斷點設置步驟:"Proxy" -> "Breakpoints Settings",彈出設置欄,選中 “Enable Breakpoints”,添加需要調試的請求即可調試:
-
Rewrite功能
Rewrite功能適合對網絡請求進行一些正則替換。
通過“Tools”->"Rewrite ",進入設置頁面,
比如有這樣一個需求,我們訪問接口:http://httpbin.org/get,將返回的數據參數名“X-Request-Id”,修改成“X_id”,具體操作如下:
原始的數據結構如圖:
8CFD2F63-F030-4309-9019-383B2A0C1334.png設置Rewrite:
039D6FDC-16D6-4E16-BCB0-C168416CC645.png63F2D39D-5C92-4EE4-875A-D976AE78075C.png設置之后重新請求接口,查看截取的請求結果,發現已經修改成了“X_id”,效果如下:
18F07852-8B99-44B9-9EF8-4496942D13A9.png
-
DNS Spoofing Settings
DNS欺騙,就是把域名解析到一個假的IP上。一般的開發流程中,在上線之前都需要在測試環境中先行進行驗證,而此時手機客戶端請求的域名是不太容易改變的,可以通過設置 DNS 方式把域名轉發到測試機上,通過“Tools”->"DNS Spoofing",進入設置頁面
比如要把所有 www.baidu.com 的域名轉到 test.com 的服務器上,可以設置如下:
BA5435ED-5B57-4380-8B26-D9D436E99AE3.pngF023784A-15E4-4399-AAB6-9295E7F9DACF.png此時再訪問百度,會發現訪問不了了!!
-
Map功能
通過“Tools”-> “Map Remote” 或者 “Tools”-> “Map Local”,進入相應的頁面設置
-
Map Remote
作用:將指定的網絡請求重定向到另一個網址。
應用:當我們請求某個接口 A ,假設 A 的地址為:http://abc.com/user?user_id=100, 但是由于后臺還沒有寫好,這時候為了調試,我們可以將請求臨時轉到地址 B 上面;假設 B 的地址為 : http://10.1.1.111/user.json
具體設置如下圖:
BDFE0957-D197-45F8-B617-68EF6CF6353C.png
497B5FFA-8B14-4BCF-8759-B3D187A2E8B2.png-
Map Local
作用:將指定的網絡請求重定向到本地文件。
應用:當我們把一個請求返回的數據直接映射到本地,例如上面說的把請求 A 地址返回的數據內容映射到本地文件** user.json** 內,如下圖所示:
70C7371E-3F78-42FA-924B-B3DF3CA6B84C.png908EE54D-4A73-4D49-9F96-2D7E300EF4F5.pngMap功能適用于長期的將某些請求重定向到另一個網絡地址或者本地文件。
-
Map Remote
參考鏈接:
http://tech.365rili.com/?p=57
http://blog.devtang.com/2013/12/11/network-tool-charles-intr/
http://blog.csdn.net/holemole/article/details/51383513
http://www.cocoachina.com/ios/20161116/18079.html
http://blog.csdn.net/jiangwei0910410003/article/details/41620363/
https://www.charlesproxy.com/download/
http://www.lxweimin.com/p/4a6eb5aad398
總結:
還有 緩存功能、設置黑名單 等等,在此就不再寫了,都還是很簡單的;還有待研究的就是 socket 請求的抓取!!!
至此:結束2天的Charles學習