mitmproxy
如果你偏愛geek風,命令行,可以采用mitmproxy。
在采用mitmproxy官網(wǎng)給出的安裝方式:
sudo pip install mitmproxy
進行安裝時,遇到error:
OSError: [Errno 1] Operation not permitted: '/tmp/pip-wTaedh-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
解決方案 是:
sudo pip install --ignore-installed mitmproxy
其中,參數(shù)--ignore-installed的意思是:忽略過去下載的安裝包。
這樣之后,import mitmproxy就沒有問題了。
然而我畢竟還是too young,在命令行下啟動:
mitmproxy -p 8080
遇到:
Traceback (most recent call last):File "/usr/local/bin/mitmproxy", line 7, in <module>from mitmproxy.main import mitmproxyFile "/Library/Python/2.7/site-packages/mitmproxy/main.py", line 5, in <module>from six.moves import _thread # PY3: We only need _thread.error, which is an alias of RuntimeError in 3.3+ImportError: cannot import name _thread
這是six的問題。
解決方案是:
sudo pip install --upgrade --ignore-installed six
sudo pip install --upgrade --ignore-installed mitmproxy
搞定!
另外,
mitmproxy的常用操作與命令可以參考這里。
Charles
如果你懶得去記各種命令,還是更喜歡友好的GUI界面,可以采用Charles。
不過是收費的。
默默給出:
http://blog.csdn.net/jiangwei0910410003/article/details/41620363
或者,
http://xclient.info/search/s/charles/ (話說,這個網(wǎng)站有各種破解版,比如UI神器sketch)
深藏功與名,請支持正版。。。
使用Charles抓Android客戶端HTTPS的包
-
原理
1.如果想了解HTTPS協(xié)議所實現(xiàn)的需求以及密鑰交換的過程,可以參考:http://www.lxweimin.com/p/ae9761bec4db。
個人認為,在對HTTPS協(xié)議原理有理解的基礎(chǔ)上,才能夠更好地理解抓包原理。
2.關(guān)于使用Charles抓取HTTPS包的原理,其實就是:中間人技術(shù)(man-in-the-middle)。
Charles會動態(tài)生成一個使用自己根證書簽名的證書,我們將該證書手動添加到客戶端,這樣客戶端就信任該證書了。
不同的Android手機查看證書的入口略不同,大致就是:“設(shè)置” --> 跟“安全”有關(guān)的選項進去找找就能看到。
查看“受信任的證書”,一般會分別顯示“系統(tǒng)信任的證書”和“用戶自定義信任的證書”。
我們手動添加的Charles自己的證書,就屬于“用戶自定義信任的證書”啦。
ok,下面大致說說實現(xiàn)抓包的過程:
Charles接收web服務(wù)器的證書,若證書沒問題,則web服務(wù)器自然是正牌的,所以Charles信任web服務(wù)器。
這樣,Charles與web服務(wù)器之間就可以完成密鑰交換了,雙方使用約定的對稱密鑰進行通信。
但是,Charles的職責可是一個代理,所以它還需要與客戶端進行通信。
而之前我們已經(jīng)為客戶端安裝上Charles的證書了,表示客戶端信任Charles。
這樣,客戶端與Charles之間也可以完成密鑰交換了,當然也可以使用約定的對稱密鑰進行通信了。
綜上,Charles與web服務(wù)器之間打通,客戶端與Charles之間打通。
Charles就在web服務(wù)器和客戶端之間充當中間人的角色,即代理。
web服務(wù)器和客戶端之間的通信內(nèi)容都會經(jīng)過Charles,也就實現(xiàn)了抓包。
-
安裝步驟
1.給客戶端(Android設(shè)備)安裝證書
http://blog.tingyun.com/web/article/detail/516
以上鏈接中,證書下載地址已不可用,可用地址為:
https://www.charlesproxy.com/documentation/additional/legacy-ssl-proxying/
在上述官方鏈接頁面中有這樣一段話:
Legacy SSL Proxying
Version of Charles prior to v3.10 used a single SSL Root Certificate. You can still download the legacy certificate bundle here or the certificate itself here (for installing on mobile devices). Note that these certificates will not work on Charles v3.10.
If you are running Charles v3.10 or later, please go to Charles and consult the SSL Proxying submenu in the Help menu, for instructions on installing your new Charles Root Certificate.
You can also check the documentation on SSL Certificates for instructions for installing your Charles Root Certificate on various devices.
也就是說,根據(jù)你使用的Charles版本不同,安裝的證書可是不同的喲。
-
a.如果你是3.10之前的版本
去上面給的鏈接下證書,然后通過如下命令:
adb push charles.crt /sdcard/
將證書push到Android設(shè)備存儲卡中,之后通過手機文件查看器查看charles.crt,直接點擊即可安裝成功。
-
b.如果你是3.10以后的版本
比如我前幾天就升級到4.0.2版本了,那么你需要先打開Charles客戶端,
如上圖所示,找到“save Charles Root Certificate”這個選項,把證書保存到本地,注意它是一個.pem結(jié)尾的文件,
然后接下來和a一樣,push到Android手機上,點擊即可安裝成功。
2.給Charles添加需要查看的HTTPS地址
如下圖所示:
Proxy → Proxy Settings → SSL
勾選上 Enable SSL proxying
點擊Add,添加需要查看的采用HTTPS的url和port。
下圖中,所添加的address為*,表示查看所用采用HTTPS的地址;port為443,這是默認的端口號。
使用Charles模擬弱網(wǎng)環(huán)境
不多說,直接上截圖,一目了然。