轉(zhuǎn)載自https://blog.csdn.net/roland_sun/article/details/30078353
現(xiàn)在的Android應(yīng)用程序幾乎都會(huì)和網(wǎng)絡(luò)打交道,所以在分析一個(gè)apk的時(shí)候,如果可以抓取出其發(fā)出的數(shù)據(jù)包,將對(duì)分析程序的流程和邏輯有極大的幫助。
對(duì)于HTTP包來(lái)說(shuō),已經(jīng)有很多種分析的方法了,例如用tcpdump,或者將要分析的程序跑在模擬器中然后直接在物理機(jī)上用WireShark抓包。但是現(xiàn)在越來(lái)越多的應(yīng)用已經(jīng)使用HTTPS協(xié)議來(lái)和服務(wù)器端交換數(shù)據(jù)了,這無(wú)疑給抓包分析增加了難度。
幸好有一個(gè)工具Fiddler可以用來(lái)解決這個(gè)問(wèn)題。Fiddler是一個(gè)非常強(qiáng)大的Web調(diào)試工具,它的原理不同于WireShark。WireShark是讓網(wǎng)卡工作在混雜模式下,截取所有網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行分析,而Fiddler本質(zhì)上是一個(gè)HTTP/HTTPS代理服務(wù)器。
既然是代理服務(wù)器,那當(dāng)然可以拿到所有的包了。
Fiddler可以從這里下載到:http://www.telerik.com/download/fiddler,如果你的Windows機(jī)上能安裝.NET 4及以上的版本,盡量選擇Fiddler4來(lái)安裝。
好了,廢話不多說(shuō)了,馬上動(dòng)手開始抓包。這里我以Google Play為例,來(lái)演示如何操作,步驟如下:
1)請(qǐng)確保你的Android設(shè)備和你安裝Fiddler的電腦都連接到一個(gè)WiFi AP上,兩臺(tái)機(jī)器在一個(gè)局域網(wǎng)段里,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如下:
2)配置Fiddler抓取并解密HTTPS包
Fiddler默認(rèn)是不抓取HTTPS包的,需要進(jìn)行相應(yīng)的配置。
打開Fiddler,選擇“Tools->Fiddler Options...”
在彈出的對(duì)話框中選擇“HTTPS”選項(xiàng)卡:
勾選“Capture HTTPS CONNECTs”,接著勾選“Decrypt HTTPS traffic”。同時(shí),由于我們是通過(guò)WiFi遠(yuǎn)程連過(guò)來(lái),所以在下面的選項(xiàng)框中選擇“...from remote clients only”。
如果你要監(jiān)聽的程序訪問(wèn)的HTTPS站點(diǎn)使用的是不可信的證書,則請(qǐng)接著把下面的“Ignore server certificate errors”勾選上。
接著切換到"Connections"選項(xiàng)卡:
監(jiān)聽端口默認(rèn)是8888,當(dāng)然你可以把它設(shè)置成任何你想要的端口。請(qǐng)一定要勾選上“Allow remote computers to connect”。
為了減少干擾,可以去掉“Act as system proxy on startup”。
最后點(diǎn)“OK”退出,F(xiàn)iddler就算是設(shè)置好了。
還有一點(diǎn)提醒大家注意,請(qǐng)一定記住將你本機(jī)上的防火墻關(guān)閉,筆者在這上面浪費(fèi)了不少時(shí)間。
3)設(shè)置Android設(shè)備,添加上代理服務(wù)器
先查看一下安裝Fiddler的電腦的IP地址是多少,在cmd里使用ipconfig命令就好了。
可以看到,筆者電腦分配到的IP地址是192.168.11.8。這就是要在Android設(shè)備上設(shè)置的代理服務(wù)器地址,至于端口嘛,就是在前面設(shè)置的監(jiān)聽端口,默認(rèn)是8888。
好了,一切準(zhǔn)備就緒,下面來(lái)設(shè)置Android設(shè)備上的代理服務(wù)器。
打開WiFi設(shè)置頁(yè)面,選擇要連接的AP,并且長(zhǎng)按,在彈出的對(duì)話框中,選擇“修改網(wǎng)絡(luò)”。
在接下來(lái)彈出的對(duì)話框中,勾選“顯示高級(jí)選項(xiàng)”。在接下來(lái)顯示的頁(yè)面中,點(diǎn)擊“代理”,選擇“手動(dòng)”。
在“代理服務(wù)器主機(jī)名”和“代理服務(wù)器端口”中寫上前面得到的地址和端口,最后點(diǎn)“保存”。
最后,連接上這個(gè)無(wú)線AP就可以了。
4)導(dǎo)證書到Android設(shè)備
Fiddler本質(zhì)上是一個(gè)HTTPS代理服務(wù)器,其自己帶的證書顯然不會(huì)在Android設(shè)備的受信任證書列表里。
有些應(yīng)用程序會(huì)查看服務(wù)器端的證書是否是由受信任的根證書簽名的,如果不是就直接跳出。
所以,為了保險(xiǎn)起見,我們要將Fiddler代理服務(wù)器的證書導(dǎo)到Android設(shè)備上。
導(dǎo)入的過(guò)程非常簡(jiǎn)單,打開設(shè)備自帶的瀏覽器,在地址欄中輸入代理服務(wù)器的IP和端口,例如本例中我們會(huì)輸入192.169.11.8:8888,進(jìn)入之后會(huì)看到一個(gè)Fiddler提供的頁(yè)面:
點(diǎn)擊頁(yè)面中的“FiddlerRoot certificate”鏈接,接著系統(tǒng)會(huì)彈出對(duì)話框:
輸入一個(gè)證書名稱,然后直接點(diǎn)“確定”就好了。
一切都設(shè)置完成了,我們來(lái)抓包看看效果吧,打開Android設(shè)備上的“Google Play”,看看能拿到什么:
看到了沒(méi)有,全都能拿出來(lái),再結(jié)合其它的一些動(dòng)態(tài)或靜態(tài)的分析方法,破解協(xié)議將變得容易一些。
最后,不得不提這種方法的一些優(yōu)點(diǎn)和缺點(diǎn)。
首先來(lái)談優(yōu)點(diǎn),有以下幾點(diǎn):
1)手機(jī)不需要root就可以抓包;
2)可以用真機(jī)抓包,有些程序是抗動(dòng)態(tài)分析的,能夠判斷自己運(yùn)行在模擬器中。
缺點(diǎn)嘛,當(dāng)然也有:
1)必須要用WiFi連接(這個(gè)很容易滿足);
2)要抓包分析的應(yīng)用程序必須自己支持代理服務(wù)器的設(shè)置。