本篇內容主要講解“Android7.0用什么工具進行抓包”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android7.0用什么工具進行抓包”吧!
本篇內容主要講解“Android7.0用什么工具進行抓包”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android7.0用什么工具進行抓包”吧!
成都創(chuàng)新互聯(lián)公司主營庫倫網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,重慶APP開發(fā)公司,庫倫h5小程序設計搭建,庫倫網(wǎng)站營銷推廣歡迎庫倫等地區(qū)企業(yè)咨詢
前言
最近在對一個app進行測試的時候,嘗試抓取數(shù)據(jù)包,發(fā)現(xiàn)以前的使用方法失效了,原因是隨著安卓版本的提高,對證書的限制越發(fā)嚴格,而我身邊的老機子放在學,不在身邊,沒得辦法,只好研究一下怎么繞過這種限制。
經(jīng)過一方查找,終于發(fā)現(xiàn)了一個相對比較簡單的辦法,這里就開一篇文章,記錄一下。
過程
首先下載所需要的工具:
Charles——https://www.charlesproxy.com/download/
Charles-Crack(有能力的同學請支持正版)——https://github.com/8enet/Charles-Crack
VirtualXposed——https://github.com/android-hacker/VirtualXposed/releases
TrustMeAlready——https://github.com/ViRb3/TrustMeAlready/releases
PC端
PC端下載并安裝好之后,運行Charles。
依次點擊菜單欄的:Proxy→Proxy Settings,并按如下進行勾選。
接著點擊菜單欄:Proxy→SSL Proxying Settings
按照下圖進行配置:
若事先確定要抓取的Host和Port信息,可自行進行更改。
接著點擊Proxy→Windows Proxy (注:不同版本名稱不同),將不再抓取本地流量。
然后點擊Help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser,將證書掛載到chls.pro/ssl這個地址上。
手機端用瀏覽器打開上述地址,將證書下載到本地。這步也可以選擇點擊菜單欄:Help→SSL Proxying→Save Charles Root Certificate...,來將證書下載到PC,通過數(shù)據(jù)線、QQ等方法傳到手機。
手機端
首先需要把手機與電腦連接到同一個網(wǎng)絡內。
打開WLAN,選擇對應的WIFI,進行代理配置。如下圖所示:
主機名為PC端的內網(wǎng)IP,端口為配置Charles時Proxy Settings配置中的Http Proxy里的Port內容。
PC端內容不清楚的同學可以打開終端運行如下命令:
Windows: ipconfig
Linux: ifconfig
Mac: ifconfig
成功代理上之后,手機端的流量都會經(jīng)過PC端的Charles。如果是第一次配置,則Charles會彈出一個窗口,提示有新的連接,點擊Allow按鈕。
其次需要將電腦端Charles的證書給安裝上。
若在PC端選擇的是Install Charles Root Certificate on a Mobile Device or Remote Browse,則先需要通過手機瀏覽器訪問chls.pro/ssl這個網(wǎng)址獲得證書文件。
這里我使用的手機為小米8 Lite,不同的手機品牌/型號安裝證書的方法可能有所不同,具體可通過搜索引擎來獲得安裝的方法。
依次點擊:設置→更多設置→系統(tǒng)安全→加密與憑據(jù)→從SD卡安裝,接著在文件瀏覽器中選擇你下載好的證書。
然后給證書憑據(jù)起個名字,可隨意填寫,憑據(jù)用途選擇VPN和應用。
安裝完畢后依次點擊:信任的憑證→用戶,即可查看到剛剛添加進來的Charles證書——XK72 Ltd。
以往我們只需要執(zhí)行到這里,便可以成功抓取到數(shù)據(jù)包。不過由于Android的版本更新,對用戶自身添加的證書進行了限制,導致我們直接地無法抓取的HTTPS數(shù)據(jù)包,在Charles里會發(fā)現(xiàn)HTTPS的流量都顯示Unknown。
這里我選擇的辦法是用VirtualXposed工具進行繞過,如果你不想使用這個方法,也可以考慮通過將手機進行Root處理,并將Charles的證書添加到系統(tǒng)級的證書中,不過這并不在本文討論的范疇。
手機下載好VirtualXposed和TrustMeAlready兩個apk文件,安裝VirtualXposed.apk之后運行。
在VirtualXposed中,先進入設置頁面,點擊添加應用,選擇你想抓取流量的應用,以及TrustMeAlready.apk文件進行安裝。注意:由于TrustMeAlready.apk未安裝,需要點擊+號按鈕,在對應的目錄選擇apk文件即可。
然后再回到設置頁面,點擊模塊管理,可以看到我們剛剛添加的TrustMeAlready便在其中,點擊右邊的框框進行勾選,接著回到設置頁面,在最下方點擊重啟、確定。
到這里我們便已經(jīng)完成了全部的操作,之后你可以在VirtualXposed框架內打開任意的app都可以成功取到HTTPS流量。
關于Charles的使用方法,本文不再贅述,網(wǎng)絡上已有許多教程,稍微花點時間搜索即可。
分析
Android7.0+為何無法直接截取HTTPS流量
在Android開發(fā)者平臺文檔,我們可以查到這么一段話:
默認情況下,來自所有應用的安全連接(使用 TLS 和 HTTPS 之類的協(xié)議)均信任預裝的系統(tǒng) CA,而面向 Android 6.0(API 級別 23)及更低版本的應用默認情況下還會信任用戶添加的 CA 存儲區(qū)。應用可以使用 base-config(應用范圍的自定義)或 domain-config(網(wǎng)域范圍的自定義)自定義自己的連接。
自定義可信 CA|Android Developer
以上說明了安卓6.0以上的版本,在默認情況下應用是不會相信用戶添加的CA證書,導致我們使用老方法無法完整地獲取到應用發(fā)出的HTTPS數(shù)據(jù)。
VirtualXposed+TrustMeAlready實現(xiàn)原理
簡單的說,VXP相當于手機上的虛擬機,在手機原有的系統(tǒng)上創(chuàng)建一塊虛擬空間,類似沙盒般的效果,而通過TrustMeAlready插件,便可HOOK到 APK 中所有用于校驗 SSL 證書的 API (詳情可以點擊參考里的《JustTrustMe原理分析》),從而繞過證書校驗,故此達到https抓包的效果。
一、什么是Virtual Xposed?
Xposed
眾所周知Xposed是來自國外XDA論壇的rovo89開發(fā)的一款開源的安卓系統(tǒng)框架。 它是一款特殊的安卓App,其主要功能是提供一個新的應用平臺,玩家們安裝Xposed框架后,就能夠通過Xposed框架搭建起的平臺安裝更多系統(tǒng)級的應用,實現(xiàn)諸多神奇的功能。
Xposed框架的原理是修改系統(tǒng)文件,替換了/system/bin/app_process可執(zhí)行文件,在啟動Zygote時加載額外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并執(zhí)行一些初始化操作(執(zhí)行XposedBridge的main方法)。然后我們就可以在這個Zygote上下文中進行某些hook操作。
Xposed真正強大的是它可以hook調用的方法.當你反編譯修改apk時,你可以在里面插入xposed的命令,于是你就可以在方法調用前后注入自己的代碼. Github開源地址: https://github.com/rovo89/Xposed 由于Xposed最大的弊端在于設備需要root,并且編寫插件模塊后需要重啟手機(當然也有辦法可以不用重啟),所以有了VirtualApp。
VirtualApp
VirtualApp是一個App虛擬化引擎(簡稱VA)。
VirtualApp在你的App內創(chuàng)建一個虛擬空間(構造了一個虛擬的systemserver),你可以在虛擬空間內任意的安裝、啟動和卸載APK,這一切都與外部隔離,如同一個沙盒。
運行在VA中的APK無需在外部安裝,即VA支持免安裝運行APK。
熟悉android系統(tǒng)開機流程的應該知道各services是由system server啟動一系列的系統(tǒng)核心服務(AMS,WMS,PMS等等)ViratualApp就是構建了一個虛擬system_process進程,這里面也有一系列的核心服務。
VirtualApp主要技術用到了反射和動態(tài)代理來實現(xiàn)的
Github開源地址:https://github.com/asLody/VirtualApp
VirtualXposed
VirtualXposed就是基于VirtualApp和epic 在非ROOT環(huán)境下運行Xposed模塊的實現(xiàn)(支持5.0~8.1)。
Github開源地址:https://github.com/android-hacker/VirtualXposed 來源:http://jackzhang.info/2018/04/09/VirtualXposed/
HTTPS抓包為何需要安裝抓包工具的CA證書
為了弄清楚這個問題,我們首先得清楚SSL/TLS加密的原理。
通常來說,SSL與TLS都是非對稱加密的,有一個公鑰與私鑰。公鑰是公開的,私鑰是私密的,存在于服務端。返回的內容會被私鑰加密,客戶端需要使用公鑰進行解密。同樣的,用戶端的數(shù)據(jù)便有公鑰加密,私鑰來解密。
而我們都知道,使用了SSL之后我們便可以保護我們的站點免受中間人攻擊。那又何為中間人攻擊呢?
舉個例子,用戶A要使用電腦訪問網(wǎng)站http://example.com,而這臺電腦已被攻擊者B攻陷,那么攻擊者B可通過修改A電腦上的hosts文件,將example.com的解析指向B自己的服務器,這樣A用戶就在”不知情“的情況下中了招。而如果該網(wǎng)站使用了SSL/TLS加密時,用戶A在訪問https://example.com的時候,需要向服務器請求公鑰的內容,又因為公鑰是放在CA證書里的,且CA證書通常是由相關的權威CA機構(權威性由微軟等操作系統(tǒng)巨頭決定)才能發(fā)布,類似我們的民政局才能發(fā)布shenfenzheng。這使得攻擊者無法偽造CA證書,因為客戶端在收到CA證書之后會根據(jù)不同的權威CA機構進行相應的驗證,而若頒發(fā)該證書的機構不夠權威(這使得權威機構也不會隨意頒發(fā)CA證書,以免自身的權威性被取消),是不會被系統(tǒng)所信任的。這一連串的操作,使得使用了SSL/TLS的網(wǎng)站可以不受中間人攻擊的影響。
OK回歸正題,那這HTTPS抓包與中間人攻擊有何關系呢?其實這兩者的原理都是一樣的,只不過攻擊者的角色變成了抓包工具。
So,這次的問題就變成了中間人攻擊如何在HTTPS通信中生效?
我們注意到,中間人攻擊的最大難點就在于CA證書的權威性,而我們在沒有域名解析權的情況下是不能去向權威CA機構申請證書的。那么既然如此,為何我們不考慮自己“開”一家權威機構呢,這樣我們生成的證書不就會被信任了嘛。
這時候,就得需要安裝我們抓包工具的CA證書了,這個證書與域名所有者向權威機構申請的證書不同,他是根證書。
因為域名的CA證書的驗證過程也是非對稱加密驗證,也就說,CA證書的驗證是由根證書里的公鑰來解密驗證的。通常操作系統(tǒng)里已經(jīng)默認信任了一批權威機構的根證書。
所以,當我們把我們自己的根證書添加到操作系統(tǒng)中時,相當于我們自己“開”了一家權威CA機構,這樣便可以解決了之前的難題。
借一張網(wǎng)圖: