Charles抓包與mock資料
最近有用到Charles,有一些感悟,分享給大家,希望對大家有所幫助。在Windows 平台相信很多人都用過Fiddler抓包,而Mac 平台一般使用Charles進行抓包。不過Charles屬于商業軟體而Fiddler屬于免費軟體。
本文無任何入侵計算機系統内容,内容完全為開放資訊,可以在網上查到。本文内容僅供學習參考,請勿用于其他非法内容。

本文用到的工具:
1. Charles 用于抓包
https://www.charlesproxy.com/
2. Frida 用于Hook
https://github.com/frida/frida
3. 彙智e站 被抓包對象
https://sj.qq.com/myapp/detail.htm?apkName=com.wiseonline.huizhi
壹---Android HTTPS 抓包
相信用過Charles的人都知道如何使用Charles直接抓包,這裡我不在多說,畢竟也沒有什麼技術含量。我想說的是通過Android端抓HTTPS的包。首先設定Charles,開啟SSL。如圖:
然後,手機端設定代理,如下圖:IP為你Charles的IP,端口為8888.
設定完畢之後安裝Root證書。
手機端也需要安裝證書,連接配接Charles之後,打開浏覽器輸入chls.pro/ssl下載下傳證書并安裝。很簡單不是,可以開始抓包了。這次我們以彙智e站為對象,看看彙智e站到底使用了什麼API。
然鵝,當我們打開APP之後發現依然不能拿到SSL的内容。而當打開一些HTTPS的網站,卻能拿到資料(比如百度),說明了證書這種方式并不能實作抓HTTPS的資料。
我查了一下,原因是Android 7 之後如果要抓APP的HTTPS請求需要在APP裡面加xml檔案,這種方式适合目前APP開發者,不适合抓包第三方APP的情況。
貮---Android HTTPS抓包失敗解決方案
解決方案也很簡單,就是上文提到的Frida . Frida 是一款Hook工具,可以用來跟蹤攔截APP的方法, 需要Python環境。
安裝:
pip install frida-tools # CLI tools
pip install frida # Python bindings
下載下傳server端,根據你的模拟器的CPU。比如x86的下載下傳x86
https://github.com/frida/frida/releases
啟動frida server
adb root && adb push frida-server-12.7.22-android-x86 /data/local/frida-server && adb shell chmod +x /data/local/frida-server && adb shell /data/local/frida-server
之後可以直接使用frida檢視相關程序
frida-ps -U
會列出所有程序
添加支援SSL JS檔案
Java.perform(function() {
var array_list = Java.use("java.util.ArrayList");
var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
// console.log('Bypassing SSL Pinning');
var k = array_list.$new();
return k;
}
}, 0);
使用該檔案進行SSL攔截跟蹤。
frida -l frida.js -U -f com.wiseonline.huizhi --no-pause
這樣就可以拿到所有HTTPS的内容。
叁---攔截修改HTTPS請求
經過以上内容,已經可以正常拿到HTTPS的所有内容,接下來就可以嘗試攔截并修改請求。以一個POST請求為例。
在請求打斷點,右鍵選擇BreakPoints,之後repeat該請求。
這時,已經進入debug模式,已經将該請求攔截。可以先修改request,如果不修改可以直接execute執行request。
然後進入Response編輯模式,可以對Response的内容進行編輯,編輯完畢點execute執行Response。
之後可以save該Response
肆---Mock 資料
以登入為例,可以先抓包拿到Response,并把Response save到本地。然後通過Local Mapping來Mock資料。當使用者名和密碼錯誤的時候,success的value是false。對應的登入結果也是登入失敗,我們把這個Response save到本地的時候,把success 從false改為true。就可以mock登入成功的情況。
伍---總結
a. Charles 不僅能用來抓包,而且可以用來Mock資料,能非常友善的提供在API不易滿足開發測試需求時,根據自己的需要定制Response内容。
b. Charles Root證書并不能拿到所有的HTTPS請求的内容, 這時候可以采取通過Frida 等工具抓包SSL。
c. 該方法不光支援Android也支援iOS,可以下載下傳對應的Frida進行抓包嘗試。
點選下方“閱讀原文”檢視更多精彩内容☺