Android 網絡通訊數據抓包篇

上期回顧:css

     上一個專題,咱們採用了IDA靜態分析和動態調試的方式,研究了一下脫殼技術。這是後續逆向惡意樣本,掌握樣本原理的前提,可是,一般分析代碼並不能知道客戶端與服務端是如何通訊的,通訊的內容是什麼?或者只能分析出一點點,數據並不全,這就須要咱們經過設置代理,利用抓包工具分析其網絡通訊數據包,這樣就在未分析代碼以前,能夠先運行樣本,抓取其網絡數據包,它的基本行爲目的就能夠猜個八九不離十,所以,本篇文章就針對這個問題,重點分享一下Android平臺的抓包分析方法和技巧。web


談到網絡數據抓包,抓包工具設置的位置,以及抓包工具的選擇很是重要,好比,若是抓包工具和手機端不在同一個網段,也就是不在一個局域網,確定是沒法獲取到數據包;若是利用Fiddler抓取SMTP郵件傳輸協議,確定也是抓不到的,由於Fiddler根本就不支持這個協議,還有樣本自己作了代理工具防禦,設置代理後,樣本將異常退出,這該怎麼辦?本篇文章就來解決這幾種常見的應用場景。正則表達式


抓包工具的位置如何設置?算法

方式一 :組網是安裝抓包工具的電腦端,以及手機端鏈接同一個路由器,這樣就可使用抓包工具截獲通過路由器的全部流量,其組網示意圖如圖1所示:
shell

圖1 組網絡示意圖apache

方式一組網方式的缺點是使用抓包工具截獲的數據包是全部經過該路由器的網絡數據,無用的數據包很是多,不利於咱們快速的定位到關鍵的數據。了減小干擾的數據包,可使用計算機端開啓Wi-Fi熱點,而後用手機鏈接計算機釋放的Wi-Fi,在手機端設置代理IP和端口,讓手機端的流量經過計算機端的代理工具,這樣就能夠大大減小無用的數據包。圖2是方式二的組網示意圖,也是咱們常常最經常使用的方式(推薦)。windows

圖2 組網絡示意圖瀏覽器

抓包工具如何選擇?安全

在選擇抓包工具以前,咱們須要知道工具支持哪些協議,是否是樣本的客戶端與服務端通訊使用的協議,好比:HTTP,HTTPS,或SMTP。抓包工具備不少種,針對不一樣的平臺,市場上有不少工具,爲了知足平常工做中的需求,這裏咱們推薦四種:Fiddler、Wireshark、Burpsuite(滲透測試),還有tcpdump。bash

工具名稱
使用範圍
tcpdump
主要針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句,不支持圖形化界面
Fiddler 主要支持HTTP和HTTPS協議,操做簡單,數據包內容清晰,支持圖形化界面 
Wireshark 基本上支持全部的協議,也是市場上安全產品識別的數據包類型.pcap,支持圖形化界面 
Burpsuite 主要用於攻擊web 應用程序的集成平臺,支持HTTP和HTTPS協議,支持圖形化界面 (偏滲透測試)


tcpdump


首先,咱們來看tcpdump,這個網上會有編譯好的,能夠直接下載,而後放入手機端(安卓或者蘋果),這個工具是個命令行工具,沒有圖形化界面,不便於分析,可是有個好處是樣本一旦增長了反代理技術,其餘三種工具可能就沒法使用了,可是這個工具並不影響,它能夠保存爲*.pcap格式,能夠再使用Wireshark工具打開解析。

下面以Android手機爲例,看一下如何使用該工具:

步驟1:在windows終端,使用adb命令將tcpdump工具push到測試機目錄,如:/data/local/tmp(用戶能夠任意選擇)

         >  adb push tcpdump /data/local/tmp

步驟2: 給測試機中的tcpdump可執行權限

        > adb shell chmod 755 /data/local/tmp/tcpdump (注意:這個是在終端操做的命令,若是在測試機tcpdump的當前路徑下,直接chmod 755 tcpdump ) 

步驟3: 工具準備好後,直接運行命令,開始抓包

          > adb shell 

          > su

          > ./tcpdump  -p-vv -s -0 -w /sdcard/data.cap 或者 ./tcpdump -i any -p -s -0 -w /sdcard/data.cap

# WiFi下抓包tcpdump -i en0 -X -s0 -w data.pcap# 2G/3G下抓包tcpdump -i pdp_ip0 -X -s0 -w data.pcap 或 tcpdump -X -s0 -w data.pcap# 抓全包寫文件tcpdump -X -s0 -w /tmp.cap     # 主機全包tcpdump -X -s0 host www.qq.com # 抓端口全包c.tcpdump -X -s0 port 14000
# tcpdump的命令格式和參數說明tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ] [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ] [ -T 類型 ] [ -w 文件名 ] [表達式 ]# 選型介紹:-a   # 將網絡地址和廣播地址轉變成名字;-d   # 將匹配信息包的代碼以人們可以理解的彙編格式給出;-dd   # 將匹配信息包的代碼以c語言程序段的格式給出;-ddd  # 將匹配信息包的代碼以十進制的形式給出;-e   # 將捕獲的包數顯示出來-f   # 將外部的Internet地址以數字的形式打印出來;-l   # 使標準輸出變爲緩衝行形式;-n   # 不把網絡地址轉換成名字;-t   # 在輸出的每一行不打印時間戳;-v   # 輸出一個稍微詳細的信息,例如在ip包中能夠包括ttl和服務類型的信息;-vv   #  輸出詳細的報文信息;-c   # 在收到指定的包的數目後,tcpdump就會中止;-F   # 從指定的文件中讀取表達式,忽略其它的表達式;-i   # 指定監聽的網絡接口;-r   # 從指定的文件中讀取包(這些包通常經過-w選項產生);-w   # 直接將包寫入文件中,並不分析和打印出來;-T   # 將監聽到的包直接解釋爲指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議)
# 下面是運維工程師,安全產品網絡抓包調試,經常使用的命令,能指定具體的設備,也能制定具體的五元組進行捕獲鏈路上的數據包:# 在使用該命令的時候,經常使用的主要選項是:  -i [接口名]  -w [文件名]  -v -vv  -c -X -e# 例如:從eth0捕獲100個數據包的時候,並將數據寫入到capture.cap文件中,命令格式爲:   tcpdump -i eth0 -w capture.cap -v -vv -c 100 -X -e# 抓取一個ip段之間的數據包:   tcpdump –s 0 –w socket host 10.1.3.9 and host 10.1.3.84# 若是從eth0且通訊協議端口爲22,目標IP爲192.168.1.100獲取數據:    tcpdump -i eth0 port 22 and src host 192.168.1.10# 此外還有其餘的一些關鍵詞:host,(主機) , net( 網關), port(端口) , src(源IP) , dst(目的IP), 正則表達式:and , or。

步驟4: 中止抓包,使用Ctrl+C

步驟5: 使用adb pull命令導出已經抓好的數據包到電腦上,以便於分析

    > adb pull /sdcard/data.cap D:/  (用戶自定義指定電腦中的路徑)  

步驟6: 使用Wireshark工具分析,結束。


Fiddler


Fiddler是一個HTTP/HTTPS調試代理工具,它可以記錄並檢查全部被代理的客戶端和互聯網之間的HTTP/HTTPS通訊,支持設置斷點調試,查看全部「進出」Fiddler的數據,包括cookiejscss等文件。使用以前,必須先對客戶端和手機端進行設置。


客戶端設置

步驟1:Fiddler軟件設置,點擊菜單欄中的「Tools」→「Options」

步驟2: 點擊「Connections」,設置代理端口是8888,勾選「Allow remote computers toconnect」,點擊「OK」

這時在Fiddler中能夠看到本機無線網卡的IP,若是沒有則重啓Fiddler,或者在cmd中的ipconfig找到本身的網卡IP

手機端設置

步驟1:查看計算機端的IP地址,Windows系統使用ipconfig命令,Linux系統使用ifconfig命令

步驟2: 在手機端鏈接計算機的Wi-Fi,而且設置代理服務器地址與端口(代理服務器IP就是步驟1中的IP,端口是Fiddler的代理端口8888),而後點擊「保存」

步驟3: 若是使用Fiddler工具抓取HTTPS的數據包,還需安裝Fiddler證書。在手機端訪問瀏覽器,輸入代理IP和端口(如:192.168.23.1:8888),下載Fiddler的證書,點擊「FiddlerRoot certificate」,爲證書任意命名後點擊「肯定」

設置完成以後,Fiddler就能夠抓包到Android手機的網絡請求了。在手機瀏覽器中打開百度網頁,以及截獲的數據包


經常使用技巧

如今Fiddler工具已經可以正常使用了。在平常工做中,Fiddler設置斷點的功能很是重要,這裏有必要提一下。點擊菜單欄中的「Rules」→「Automatic Breakpoints」

(1)中斷Requests

中斷Requests通常有兩種方式:

第一種方式是打開Fiddler,點擊「Rules」→「AutomaticBreakpoint」→「Before Requests」,這樣會中斷全部的會話。消除命令只須要點擊「Rules」→「AutomaticBreakpoint」→「Disabled」便可。

第二種方式是在命令行中輸入命令bpu www.baidu.com,這樣只會中斷www.baidu.com。在命令行中輸入命令bpu便可消除命令。

(2)中斷Response

中斷Response也有兩種方式。

第一種方式是打開Fiddler點擊「Rules」→「AutomaticBreakpoint」→「After Response」,這樣會中斷全部的會話。消除命令只須要點擊「Rules」→ 「AutomaticBreakpoint」→「Disabled」便可。

第二種方式是在命令行中輸入命令bpafter www.baidu.com。這樣只會中斷www.baidu.com。在命令行中輸入命令bpafter便可消除命令。

(3)AutoResponder

Fiddler的AutoResponder tab容許從本地返回文件,而不用將http request發送到服務器上。AutoResponder的設置界面以下:

Fiddler功能強大,以上功能基本上能夠知足平常工做需求。

#Fiddler顯示請求服務器IP的辦法,若是沒有設置,新安裝的Fiddler是不顯示目標IP地址# 打開Fiddler的自定義腳本文件CustomRules.js,找到static function Main這裏,在函數體內添加以下一行並保存。FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");

代碼效果以下:

注意: 若是沒有找到CustomRules.js文件,必須首次先啓動下Fiddler的規則:

CustomRules.js的路徑:../個人文檔/Fiddler2/Scripts/CustomRules.js

從新啓動Fiddler,就能夠看到了(Server IP這一列默認是在最後,能夠用鼠標選中後能夠往前拖,拖到本身喜歡的位置),效果以下:


Wireshark


Wireshark(原名Ethereal)是一個網絡封包分析軟件,功能是截取網絡封包。Wireshark使用WinPCAP做爲接口,直接與網卡進行數據報文交換。而Fiddler工具具備侷限性,只能抓取HTTP和HTTPS的數據包,且保存的格式爲.saz,如SMTP郵件協議的數據包是沒法獲取的。

網絡配置和前面是一致的,必須保證手機和計算機在同一網段。打開Wireshark工具,選擇計算機中設置的本地網絡,點擊「Start」,按照最新版的wireshark,通常狀況計算機中會有不少網絡節點,咱們觀察有流量的哪個。

上圖是截獲的是電腦中的全部流量,若是要抓取手機端的流量,最好是電腦端先使用工具釋放個Wi-Fi熱點,讓手機端鏈接電腦端釋放的Wi-Fi,這樣網絡選擇就選擇虛擬Wi-fi節點,這樣能夠減小沒必要要的流量。

該工具使用簡單,須要注意的是,在分析數據包時,有效的過濾可以提升工做效率。好比在打電話時收到某程序發送的報文,能夠關閉全部其餘使用網絡的應用來減小流量,但仍是可能有大批報文須要篩選,這時就要用到Wireshark過濾器。最基本的方式就是在窗口頂端過濾欄輸入並點擊「Apply」,或者按下回車鍵顯示過濾結果。例如,輸入「dns」就會只看到DNS報文。輸入的時候,Wireshark會幫助自動完成過濾條件。

下面是經常使用於IP過濾的幾個命令。

(1)源IP的表達式:ip.src==192.168.0.105,或ip.srceq192.168.0.105

含義:篩選出源IP是192.168.0.105的數據包。

(2)目標IP的表達式:ip.dst==119.147.74.18,或ip.dsteq119.147.74.18

含義:篩選出目標IP是119.147.74.18的數據包。

(3)直接按IP過濾的表達式:ip.addr==202.105.182.132,或ip.addreq 202.105.182.132

含義:篩選出與202.105.182.132相關的數據包。

更多詳細的使用方法,你們能夠在網上參考相關資料,這方面仍是比較豐富的。


Burpsuite


Burp Suite 主要應用於攻擊web 應用程序的集成平臺,也能夠抓包,支持HTTP和HTTPS協議,數據包篡改重放測試,密碼字典破解常用,工具截圖以下:

電腦端設置:

手機端設置

手機端設置,操做步驟與Fiddler工具設置同樣,這裏就不贅述了,惟一的區別在於,當要抓取HTTPS數據包時,須要先在手機端安裝工具對應的證書,burpsuite也是同樣的,在手機端設置好電腦端代理IP和8080端口後,還須要用戶在手機瀏覽器中訪問http://burp安裝證書,這樣就設置完成了,就能夠利用Proxy功能開始抓包了。

鑑於篇幅緣由,這裏就不深刻展開了,感興趣的能夠參考網上的資料學習。本文中介紹的工具不只限於Android平臺,IOS平臺也一樣支持。


至此,抓包工具網絡設置清楚了,抓包工具的使用方法也清楚了,在平常工做中,只要沒有特殊要求,咱們就根據我的喜愛,選擇抓包工具。我的比較喜歡Fiddler和Wireshark。若是系統須要*.pacp數據包格式,那就必須使用tcpdump和Wireshark,若是不要求,建議直接使用Fiddler,簡單,直觀,同時該工具內置解密算法,解密也比較方便,可是,如何涉及到密碼、驗證碼爆破等操做,仍是使用Burp Suite比較好。


最後,再給你們推薦一個博客http://www.vants.org/,網絡分析實戰,利用抓包技術,解決網絡運維中常見問題,更切合現實場景。

好了,本篇文章就分享到此。


END


---------------------------------------------
本節部份內容需參考《Android 應用安全測試與防禦》
若是您對App安全有任何問題
可在本公衆號進行留言
咱們會進行回覆~
---------------------------------------------
本書由中國工信出版集團人民郵電出版社(2020年5月)出版,可到各大電商平臺(京東、天貓、噹噹等)購買,搜索書名《Android 應用安全測試與防禦》便可。

歡迎關注本書公衆號
獲取更多App安全知識

       

本文分享自微信公衆號 - App安全紅寶書(apphongbaoshu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索