抓包工具的安裝和配置
1 Charles的安裝和配置
1.1 Charles的安裝
- 下載地址:https://www.charlesproxy.com/download/
- 安裝地址:D:\Python\Charles
- 系統版本:W10 64位
- 注冊破解:
- Registered Name: https://zhile.io
- License Key: 48891cf209c6d32bf4
1.2 Charles的配置
1.2.1 PC端證書安裝
首先打開Charles,按照如下路徑依次點擊:
Help –> SSL Proxying –> Install Charles Root Certificate
即可進入證書安裝頁面。在彈出的證書安裝頁面點擊安裝證書(I)...進入證書安裝向導,直接點擊下一步,選中將所有證書放入下列存儲(P),然后點擊瀏覽按鈕,從中選擇證書存儲位置為受信任的根證書頒發機構,再次點擊確定按鈕,然后點擊下一步,再繼續點擊下一步按鈕完成導入。
1.2.2 移動端證書安裝
以IOS系統為例,首先查看PC端Charles代理是否開啟:
Proxy –> Proxy Settings
打開代理設置頁面,確保當前的HTTP代理是開啟的,即勾選中Enable transparent HTTP proxying。此代理端口為8888,也可自行修改。
接下來將手機和電腦連接在同一個局域網下(同一個WIFI網絡即可)。然后查詢PC端的IP地址(不是網絡IP地址,是機器的IPv4地址):
Wireless LAN adapter WLAN: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::a982:2d9c:45a7:7a96%5 IPv4 Address. . . . . . . . . . . : 192.168.31.48 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.31.1
然后啟用手機已連接網絡(WIFI網絡)的http代理,將服務器設置為IPv4地址,端口設置為8888,然后保存。最后在PC端回出現一個提示窗口,詢問是否信任此設備,點擊Allow按鈕即可。這樣手機和PC就連接在同一個局域網內,並且設置了Charles的代理,即Charles可以抓取到流經App的數據包了。
接下來再移動端安裝Charles的HTTP證書,首先打開Charles,然后按照如下路徑依次點擊:
Help –> SSL Proxying –>Install Charles Root Certificate on a Mobile Device
此時會出現一個提示框,提示在移動端設置好Charles代理(IPv4:8888),然后在手機瀏覽器(移動端系統自帶的瀏覽器)中打開http://chls.pro/ssl下載證書,然后會彈出安裝證書界面,點擊安裝即可。最后,若IOS系統版本是10.3以上,還需要在:
設置 –> 通用 –> 關於本機 –> 證書信任設置
中將證書的完全信任開關打開。到此,整個配置完成,打開Charles,並在手機上隨便瀏覽一下網頁,可以發現Charles已經能夠抓取到數據包。
1.3 Charles的亂碼問題
抓取的過程中發現抓取到的數據包亂碼和鏈接unknown問題,原因是需要配置SSL代理,按如下順序依次點擊:
Proxy –> SSL Proxying Setting –> Enable SSL Proxying
然后點擊Add,在彈出的窗口中,Host填寫*,Port填寫443,然后點擊確定,最后重啟Charles即可解決亂碼問題。
2 mitmproxy的安裝和配置
mitmproxy是一個支持HTTP和HTTPS的轉包程序,類似Fiddler、Charles的功能。只不過通過控制台的形式操作。此外,mitmproxy還有兩個關聯組件,一個是mitmdump,它是mitmproxy的命令行接口,利用它可以對接Python腳本,實現監聽后的處理;另一個是mitmweb,它是web程序,通過它可以清楚的觀察到mitmproxy捕獲到的請求。
2.1 mitmproxy的相關鏈接
- mitmproxy Github地址:https://github.com/mitmproxy/mitmproxy
- 官方網站:https://mitmproxy.org/
- PyPI:https://pypi.org/project/mitmproxy/
- 官網文檔:https://docs.mitmproxy.org/stable/
- mitmdump腳本:https://docs.mitmproxy.org/stable/addons-scripting/
- mitmdump Github地址:https://github.com/mitmproxy/mitmproxy/releases
- DockerHub:https://hub.docker.com/r/mitmproxy/mitmproxy/
2.2 mitmproxy的安裝方法
- 使用pip命令直接安裝:
C:\Users\Strive>pip3 install mitmproxy
如果網絡沒有問題,會直接安裝好mitmproxy和所有的依賴庫。
- 在Github上下載安裝包:
Tips:Windows上不支持mitmproxy的控制台接口,但是可以使用mitmdump和mitmweb。
2.3 mitmproxy的證書配置
對於mitmproxy來說,如果想要截獲HTTPS請求,就需要設置證書。mitmproxy在安裝后會提供一套CA證書,只要客戶端信任了mitmproxy提供的證書,就可以通過mitmproxy截獲HTTPS請求的具體內容。
- 首先,運行一下命令產生CA證書,並啟動mitmdump:
mitmdump
- 接下來在用戶目錄下的.mitmproxy目錄里找到CA證書,一共5個證書和一個導入證書引導頁文件:
-
- mitmproxy-ca.p12: 打開該文件,會進入導入證書引導頁。
- mitmproxy-ca.pem: PEM格式的證書私鑰
- mitmproxy-ca-cert.pem: PEM格式證書,適用於大多數非Windows平台
- mitmproxy-ca-cert.p12:PKCS12格式證書,適用於Windows平台
- mitmproxy-ca-cert.cer: 與mitmproxy-ca-cert.pem相同,只是改變了后綴,適用於部分Android平台
- mitmproxy-dhparam.pem: PEM格式的密鑰文件,用於增強SSL安全性
- 然后打開mitmproxy-ca.p12文件,進入導入證書引導頁,點擊下一步會出現密碼設置提示,不需要設置密碼,直接點擊下一步,勾選將所有的證書都放入下列存儲(P),再點擊瀏覽,選擇證書存儲位置為受信任的根證書頒發機構,接着點擊確定,然后點擊下一步,如果有安全警告彈出,直接點擊是。這樣就完成Windows上mitmproxy證書的配置。
- 將mitmproxy-ca-cert.pem文件用郵件發送到Iphone上,然后再Iphone上直接點擊附件並識別安裝。注意,必須要用Iphone自帶的郵件App收郵件,才能識別附件。
- 最后啟用手機已連接網絡(WIFI網絡)的http代理,將服務器設置為IPv4地址,端口設置為8080(Charles的端口為8888),就可以成功HTTPS請求的具體內容。
3 Appium的安裝和配置
Appium是移動端的自動化測試工具,類似於PC端的Selenium,利用它可以驅動Android、IOS等設備完成自動化測試,比如模擬點擊、滑動、輸入等操作。Appium負責驅動移動端來完成一系列操作,對於IOS設備來說,它使用UIAutomation來實現驅動;對於Android設備來說,它使用UIAutomator和Selendroid來實現驅動。同時,Appium也相當於一個服務器,可以向其發送一些操作指令,它會根據不同的指令對移動設備進行驅動,以完成不同的的工作。
3.1 Appium的相關鏈接
- Github地址: https://github.com/appium/appium
- 官網網站: http://appium.io/(需要使用代理)
- 官方文檔: http://appium.io/docs/en/about-appium/intro/(需要使用代理)
- 下載地址: https://github.com/appium/appium-desktop/releases
- Python Client: https://github.com/appium/python-client
3.2 Appium的安裝方法
- 下載Appium Desktop來安裝Appium:
Appium Desktop支持全平台的安裝,直接在https://github.com/appium/appium-desktop/releases下載對應平台的最新版本安裝即可。
-
Windows平台可以下載exe安裝包appium-desktop-setup-1.7.0.exe。
-
Mac平台可以直接下載dmg安裝包如Appium-1.7.0.dmg。
-
Linux平台可以選擇下載源碼,但是更推薦使用Node.js安裝方式。
-
- 使用Node.js的方式來安裝Appium:
首先需要安裝Node.js,具體安裝方式可以參考http://www.runoob.com/nodejs/nodejs-install-setup.html,安裝完成之后就可以使用npm命令了。接下來使用npm命令全局安裝Appium即可:npm install -g appium
3.3 Android開發環境配置
如果使用Android設備進行App抓取的話,還需要下載和配置Android SDK,這里推薦直接安裝Android Studio(安裝教程):
在安裝Android Studio之前還要確定已經安裝好了Java JDK(安裝教程):
完成上述環境配置后,下載逍遙模擬器,然后進行安裝:
- 模擬器安裝路徑:D:\Program Files\Microvirt
- 模擬器adb路徑: D:\Program Files\Microvirt\MEmu\adb.exe(和Android SDK的adb重名)
- 模擬器adb版本,進入MEmu目錄,終端執行命令adb:
D:\Program Files\Microvirt\MEmu>adb Android Debug Bridge version 1.0.31
- 查看模擬器設備端口號,進入Memu目錄,終端執行命令adb devices:
D:\Program Files\Microvirt\MEmu>adb devices List of devices attached 127.0.0.1:21503 device
可以查看到設備地址和端口127.0.0.1:21503
- Android SDK路徑: D:\Java\Android\Sdk
- Andriod SDK adb路徑:D:\Java\Android\Sdk\platform-tools\adb.exe
- Android SDK adb版本,因為已經配置好了環境變量,所以終端任意位置執行命令adb:
C:\Users\Strive>adb Android Debug Bridge version 1.0.40 Version 4986621 Installed as D:\Java\Android\Sdk\platform-tools\adb.exe
通過上述內容可以發現模擬器的adb和Android SDK的adb版本不同,為了實現Appium連接上模擬器,需要將模擬器的adb版本替換成Android SDK adb版本,並且替換后的adb命令名字必須和原來模擬器adb名字一樣(例如,模擬器本來的adb文件名叫xiaoyao_adb.exe,用Android SDK 的adb.exe將xiaoyao_adb.exe替換掉后,需要將adb.exe重命名為xiaoyao_adb.exe)。
終端任意位置執行adb connect 127.0.0.1:21503命令來鏈接模擬器:
D:\Program Files\Microvirt\MEmu>adb connect 127.0.0.1:21503
already connected to 127.0.0.1:21503:5555
終端任意位置執行adb devices -l命令來查看連接情況:
C:\Users\Strive>adb devices -l
List of devices attached
127.0.0.1:21503 device product:LG-H990DS model:LG_H990DS device:LG-H990DS transport_id:2
說明PC已經正確連接到模擬器了。Appium啟動一個App時需要設置Desired Capabilities(完整的Desired Capabilities配置)的四個參數:
- platformName: 平台名稱,需要區分Android和ios,根據具體平台填寫即可。
- deviceName: 設備名稱,此處是手機的具體類型,即model的值LG_H990DS(模擬器的話是類似127.0.0.1:21503這樣的address:port)。
- appPackage: App的包名,可以使用adb shell pm list packages -3命令查看機器中安裝的第三方App包名:
C:\Users\Strive>adb shell pm list packages -3 package:io.appium.settings package:com.youku.phone package:com.UCMobile.x86 package:com.tencent.mm package:com.tencent.mobileqq package:com.jingdong.app.mall package:com.sina.weibo package:io.appium.unlock package:com.eg.android.AlipayGphone
- appActivity: 入口Activity名稱,通常需要以.開頭,可以使用adb shell dumpsys package <package name>來查找到appActivity:
C:\Users\Strive>adb shell dumpsys package com.tencent.mm
因為顯示內容太多,終端緩存不夠,查看不到最開始的信息,所以將輸出保存為文件(有的內容短的不需要保存為文件)查看:
C:\Users\Strive>adb shell dumpsys package com.tencent.mm > weixin.txt
在C:\Users\Strive目錄下有個名為weixin.txt的文件,打開查看:
Activity Resolver Table: Full MIME Types: vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI vnd.android.cursor.item/vnd.com.tencent.mm.plugin.sns.timeline: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI application/*: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI ...省略掉了... Base MIME Types: vnd.android.cursor.item: 11b256ae com.tencent.mm/.plugin.account.ui.ContactsSyncUI (6 filters) text: 34b938e5 com.tencent.mm/.plugin.account.ui.VoiceActionActivity (2 filters) Wild MIME Types: text: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI 17ec1c4f com.tencent.mm/.ui.tools.ShareImgUI audio: 14424fdc com.tencent.mm/.ui.tools.AddFavoriteUI ...省略掉了... Schemes: weixin: 34d28d86 com.tencent.mm/.plugin.setting.ui.qrcode.GetQRCodeInfoUI 35497e61 com.tencent.mm/.plugin.base.stub.WXCustomSchemeEntryActivity tencent1103188687: 20694647 com.tencent.mm/.plugin.webview.ui.tools.QQCallbackUI http: 34d28d86 com.tencent.mm/.plugin.setting.ui.qrcode.GetQRCodeInfoUI Non-Data Actions: ...省略掉了... android.intent.action.MAIN: 22b4de0 com.tencent.mm/.ui.LauncherUI ...省略掉了...
上述內容22b4de0 com.tencent.mm/.ui.LauncherUI中的.ui.LauncherUI即為查找到的appActivity
如果想要用真機進行測試和數據抓取,具體可以參考https://github.com/appium/appium/blob/master/docs/cn/appium-setup/real-devices-android.md
3.4 IOS開發環境配置
Appium是一個做自動化測試的工具,用它來測試自己開發的App是完全沒有問題的,因為它攜帶的是開發證書(Development Certificate)。如果想用IOS設備來做數據爬取的話,又是另外一回事了。一般情況下,做數據爬取都是使用現有的App,在IOS中一般都是通過App Store下載愛的,它攜帶的是分發證書(Distribute Certificate),而攜帶這種證書的App是禁止測試的,所以只有獲取ipa安裝包再重新簽名之后才可以被Appium測試(ipa包重簽名教程)。
Appium驅動IOS設備必須在Mac下進行,Windows和Linux平台是無法完成的。Mac平台的配置:
- macOS 10.12及更高版本
- Xcode 8及更高版本
配置滿足要求之后,執行如下命令配置依賴庫和工具:
xcode-select --install
這樣IOS部分的開發環境就配置完成了,可以用IOS模擬器來進行測試和數據抓取了。
如果想要用真機進行測試和數據抓取,具體可以參考https://github.com/appium/appium/blob/master/docs/cn/appium-setup/real-devices-ios.md
4 參考資料
- Charles 注冊碼/破解:https://www.jianshu.com/p/89111882fa99
- 細說 Charles 配置 HTTPS 代理的亂碼問題:https://blog.csdn.net/sara_xuehua/article/details/73331981