1.Charles
Charles是一個(gè)HTTP代理/ HTTP監(jiān)視器/反向代理,使開發(fā)人員能夠查看他們的機(jī)器和Internet之間的所有HTTP和SSL / HTTPS通信。這包括請(qǐng)求、響應(yīng)和HTTP頭(包含cookie和緩存信息)。
2.Charles 使用與配置
-
2.1 抓取HTTP請(qǐng)求
打開Charles,打開Charlels主題菜單,找到Proxy
勾選上macOS Proxy就可以了
在macOS Proxy 的下方有Proxy Settings選項(xiàng),點(diǎn)擊打開
在Port出輸入8888,并且勾選下方Enable transparent HTTP proxying 選項(xiàng),點(diǎn)擊OK即可.
- 2.2 找到我們mac的ip,以方便在mac上抓取移動(dòng)端app的數(shù)據(jù)包
三種種方式找到我們的mac ip地址
第一種:
(設(shè)置中找到網(wǎng)絡(luò)即可看到mac ip地址)
第二種:
(在Charles菜單欄中,找到Help-->Local IP Address,打開即可找到ip地址)
第三種:
(終端-->ifconfig)
-
2.3 手機(jī)配置
2.4 然后就可以愉快的抓取http包了.
3.抓取https包
- Charles可以抓取http協(xié)議的包,也能抓取https協(xié)議的包.
- 由于https是經(jīng)過加密的,抓取的包以密文方式展現(xiàn)的
- 配置Charles的SSL可以以明文查看https協(xié)議傳輸?shù)膬?nèi)容
菜單欄中找到Help-->SSL Proxying -->>Install Charies Root Certificate!
在鑰匙串中,找到Charles Proxy 證書,這個(gè)是我信任后的證書
安裝的后的證書是不被信任的.
我們選中證書,右鍵,顯示簡(jiǎn)介就可以出現(xiàn)上圖,我們信任證書即可
然后輸入mac密碼確認(rèn).
證書到這里已經(jīng)完成安裝
- 配置SSL
菜單欄--> Proxy --> SSL Proxying Settings
Host: *
Port: 443
點(diǎn)擊ok即可完成配置
- 好了,這里就可以以明文的方式查看https傳輸?shù)脑斍榱?
4.Charles抓包工具的中文亂碼解決辦法
裝好了,打開Charles后,發(fā)現(xiàn)抓到的包c(diǎn)ontent都是亂碼.
下面有個(gè)解決辦法,有助于大家參考,解決了問題.
菜單欄找到-->Tools-->Rewrite
開啟Enable Rewrite ,添加charset
Name: UTF-8-Set
點(diǎn)擊Add,添加內(nèi)容
紅框出添加或者勾選,點(diǎn)擊ok即可完成配置.
我們的問題就可以解決了.
5. AppStore 數(shù)據(jù)包抓取
如果我們完成了所有的配置,是不是就可以愉快地抓包了呢?心情會(huì)變得開心。但是問題隨之而來,到底是什么問題呢?這么神秘嗎?這個(gè)問題確實(shí)有點(diǎn)神秘。
我們到了這一步都還順利,但突然出現(xiàn)了意想不到的問題。當(dāng)我們輸入密碼和賬號(hào)后,點(diǎn)擊登錄按鈕時(shí)卻提示連接到Apple服務(wù)器出錯(cuò),這讓我們非常不開心。當(dāng)時(shí)甚至無法打開AppStore,顯示連接不到Apple服務(wù)器。其他軟件可以正常抓取數(shù)據(jù),所以我們猜測(cè)是不是蘋果設(shè)置了反抓取機(jī)制。
后來,我們找到了原因:越獄手機(jī)需要禁止SSL Pinning證書,而AppStore使用的是SSL Pinning(證書鎖定)。因此,無法通過抓包工具直接抓取包。要想抓取包,必須通過安裝插件來禁止SSL Pinning。這是目前最有效的解決方法,但不確定是否有效。我們決定嘗試一下。
- 我們首先準(zhǔn)備越獄機(jī)(系統(tǒng)版本為iOS 9.3.1,并已越獄)。
- 2.下載(SSL KillSwitch 2)插件。
地址: https://github.com/nabla-c0d3/ssl-kill-switch2
- 3.越獄機(jī)都有cydia軟件,一定要裝上插件OpenSSH
這里就不介紹如何安裝了,請(qǐng)看我寫的"技藝精進(jìn):iOS逆向工具精選" ,有講到OpenSSH. - 4.連接手機(jī)終端,將deb包傳輸?shù)皆姜z手機(jī)。
scp com.nablac0d3.sslkillswitch2_0.12.deb root@host:var/root/
安裝sslkillswitch
dpkg -i com.nablac0d3.sslkillswitch2_0.12.deb
安裝中遇到的問題:
主要cydia沒有安裝插件 preferenceloader
在cydia中找到該插件,并安裝.就可以解決問題.
安裝完成后,手機(jī)會(huì)立即重啟,重啟后我們進(jìn)入設(shè)置,最下面會(huì)多了一個(gè)SSL Kill Switch2
- 5.這一步完成后,應(yīng)該可以使用了.雖然禁止了SSL Pinning,我們登錄的時(shí)候仍然是報(bào)服務(wù)器請(qǐng)求錯(cuò)誤.
Why SSL Kill Switch didn’t work
I initially thought the issue to be that the strategy used by the SSL Kill
Switchto disable certificate validation somehow wasn’t enough to
bypass *itunesstored*’s certificate pinning. However, it turns out that the SSL
Kill Switch was just not being injected into the *itunesstored* process at all,
for a couple reasons:
The itunesstored process is started as a daemon by launchd early during
the device’s boot sequence, before MobileSubstrate and MobileLoader get
started. Therefore, none of the MobileSubstrate tweaks installed on the
device, including the SSL Kill Switch, get injected into this process.
The SSL Kill Switch had a MobileLoader filter so that the code disabling
certificate validation would only be loaded into apps linking the UIKit bundle
(ie. applications with a user interface). This was initially done to restrict the
effect of the SSL Kill Switch to App Store apps only.
However, itunesstored is a daemon that doesn’t have a user interface,
hence the filter prevented MobileLoader from injecting the SSL Kill Switch
into the process.
After figuring this out, getting *itunesstored* to stop validating SSL
certificates was very straightforward. First of all, make sure you’re using the
latest version of the SSL Kill Switch(at least v0.5). Then, all you need to do is
kill the itunesstored process:
iPad-Mini:~ root# ps -ef | grep itunesstored
501 170 1 0 0:00.00 ?? 0:01.95 /System/Library/PrivateFrameworks/iTunesStore.framework/Support/itunesstored
0 432 404 0 0:00.00 ttys000 0:00.01 grep itunesstored
iPad-Mini:~ root# kill -s KILL 170
原因是在早期啟動(dòng)時(shí),itunesstored進(jìn)程作為守護(hù)進(jìn)程啟動(dòng),并且在設(shè)備的引導(dǎo)序列中開始了MobileSubstrate和MobileLoader。因此,SSL Kill Switch作為MobileSubstrate的插件,無法注入到itunesstored進(jìn)程中。
解決方法是必須殺掉itunesstored進(jìn)程,因?yàn)閕tunesstored作為守護(hù)進(jìn)程會(huì)自動(dòng)啟動(dòng)。在自啟時(shí),SSL Kill Switch 就會(huì)被注入到itunesstored進(jìn)程中。操作命令如下,我們也可以自己操作一下。
kill進(jìn)程后,我們重啟App Store,就可以愉快地抓包了。
我第一次操作時(shí)并沒有得到任何結(jié)果,開始覺得這個(gè)方法并沒有解決問題。后來,我嘗試了關(guān)機(jī)重啟,然后再次執(zhí)行kill命令,最后,一切都正常了。
如果你也遇到了類似情況,可以嘗試重啟手機(jī)多次,多操作幾次。
6.總結(jié)
因?yàn)樽罱芯孔トppStore的數(shù)據(jù)包,我開始研究了一下Charles。剛接觸就遇到了一些問題,所以我把自己的解決方法告訴了大家,希望能幫助大家少走彎路,節(jié)省更多的時(shí)間。
本文簡(jiǎn)單介紹了Charles的配置和使用,如何獲取AppStore的數(shù)據(jù)包。當(dāng)然,Charles還有許多其他功能等待你去研究。希望這篇文章能對(duì)你有所幫助。
我還有許多文章準(zhǔn)備更新,敬請(qǐng)持續(xù)關(guān)注。
公眾號(hào):聽木子說心語。文章也會(huì)同步在公眾號(hào)上發(fā)布,有需要的朋友可以關(guān)注一下。