網(wǎng)頁(yè)與APP逆向概述
網(wǎng)頁(yè)與APP逆向概述
作者:白澤圖鑒
從抓包工具、抓包的目的、程序模擬流量、加密方式的分析等多個(gè)角度概述網(wǎng)頁(yè)及APP逆向的技術(shù)細(xì)節(jié)。
網(wǎng)頁(yè)逆向
1.1抓包工具
網(wǎng)頁(yè)逆向的第一步是抓包,通常使用firebug、谷歌瀏覽器、httpV7、fiddler、httpwatch等工具對(duì)網(wǎng)頁(yè)進(jìn)行抓包分析。其中firebug和httpwatch是同類型的抓包工具,通常用于分析網(wǎng)絡(luò)post流量,這兩款工具搜索報(bào)文十分方便。firebug可以用于報(bào)文中的js調(diào)試,而httpwatch無(wú)法進(jìn)行js調(diào)試。對(duì)于js調(diào)試,谷歌瀏覽器的開(kāi)發(fā)者工具更加方便。由于谷歌內(nèi)核是開(kāi)源的,所以包括360、IE在內(nèi)的眾多瀏覽器都能使用它的開(kāi)發(fā)者工具。httpv7是一款方便檢查參數(shù)請(qǐng)求內(nèi)容的抓包工具,它可以有效地檢測(cè)出POST內(nèi)容的參數(shù)錯(cuò)誤。fiddler是一款非常靈活的抓包工具,它既可以實(shí)現(xiàn)網(wǎng)頁(yè)的抓包,也可以實(shí)現(xiàn)APP的抓包。同時(shí),它也是一款全局抓包工具,可以有效地避免網(wǎng)頁(yè)切換過(guò)程中產(chǎn)生的漏包情況,能夠存儲(chǔ)保全網(wǎng)絡(luò)操作過(guò)程中所有http協(xié)議的報(bào)文。
1.2抓包的目的
在網(wǎng)頁(yè)逆向分析中,對(duì)網(wǎng)頁(yè)進(jìn)行抓包的目的是對(duì)網(wǎng)頁(yè)進(jìn)行分析。分析包括兩個(gè)層面,即流程和數(shù)據(jù)包。流程指數(shù)據(jù)包請(qǐng)求和響應(yīng)的程序邏輯,如網(wǎng)站登錄時(shí)需要登錄驗(yàn)證,要首先獲取驗(yàn)證碼的數(shù)據(jù),然后再將賬號(hào)信息一起提交到服務(wù)端。大部分的服務(wù)都會(huì)檢測(cè)流程的邏輯,如果請(qǐng)求的邏輯不滿足服務(wù)端的規(guī)則,會(huì)導(dǎo)致請(qǐng)求出錯(cuò)或服務(wù)器拒絕訪問(wèn)。網(wǎng)頁(yè)抓包所指的數(shù)據(jù)包主要為超文本傳輸協(xié)議(http)的數(shù)據(jù)包,一般由兩部分組成即請(qǐng)求頭和參數(shù)(請(qǐng)求體)。在請(qǐng)求頭部中,最重要的參數(shù)是url和cookie。逆向分析的重點(diǎn)是對(duì)數(shù)據(jù)包進(jìn)行分析,偽造其請(qǐng)求頭和參數(shù)。其中,參數(shù)可能是從之前的網(wǎng)頁(yè)請(qǐng)求返回的,也有可能是通過(guò)js進(jìn)行加密的,也有可能是從cookie中提取出來(lái)的,還有可能是固定寫(xiě)在代碼邏輯值中的常量。
1.3程序模擬流量
對(duì)數(shù)據(jù)包完成分析后,需要通過(guò)程序模擬數(shù)據(jù)包請(qǐng)求和響應(yīng)的過(guò)程。此時(shí),需要分兩種情況進(jìn)行討論。第一種情況,數(shù)據(jù)包中的參數(shù)信息未進(jìn)行加密,這種情況較為簡(jiǎn)單,只需要寫(xiě)程序模擬數(shù)據(jù)包。第二種情況,數(shù)據(jù)包中的參數(shù)是加密的,這種情況非常復(fù)雜,需要進(jìn)一步討論分析。
1.4加密方式的分析
在網(wǎng)頁(yè)中,常見(jiàn)的加密方式包括三種:flash加密、密碼控件加密和JS加密。其中,JS加密十分常見(jiàn)。flash加密方式需要進(jìn)行反編譯,需要逆向分析者對(duì)AS語(yǔ)言及匯編語(yǔ)言有一定的基礎(chǔ),才能進(jìn)一步分析。密碼控件一般在銀行、理財(cái)領(lǐng)域應(yīng)用地比較廣泛。
JS逆向方法
對(duì)于JS加密的網(wǎng)站,一般通過(guò)搜索定位、事件監(jiān)聽(tīng)斷點(diǎn)、函數(shù)調(diào)用棧、算法還原等這幾種方式來(lái)復(fù)現(xiàn)參數(shù)加密的邏輯。
搜索定位
搜索定位的常見(jiàn)方式包括搜鏈接(url)、搜對(duì)應(yīng)參數(shù)(如password)、搜其他參數(shù)、搜id(或name)、搜關(guān)鍵字(AES、MD5、RSA、tripedes、encrypt、setpublickey等)、搜文字(如登錄中,文字Unicode編碼,16進(jìn)制編碼)。
事件監(jiān)聽(tīng)斷點(diǎn)
事件監(jiān)聽(tīng)斷點(diǎn)是指當(dāng)用戶觸發(fā)某事件后,網(wǎng)頁(yè)流量進(jìn)程自動(dòng)在某源碼處停止運(yùn)行的行為。
如對(duì)于常見(jiàn)的登錄框,可以選擇當(dāng)用戶點(diǎn)擊按鈕時(shí)程序停止運(yùn)行。此時(shí)需要勾選Event Listenner Breakpoits中的Mouse選項(xiàng)框的click選項(xiàng)。
函數(shù)調(diào)用棧
函數(shù)調(diào)用棧(先進(jìn)后出的邏輯關(guān)系)一般指程序設(shè)計(jì)中的函數(shù)間的調(diào)用順序邏輯關(guān)系,可以通過(guò)該方法找到函數(shù)調(diào)用的地方。函數(shù)調(diào)用棧一般在搜索定位相關(guān)關(guān)鍵詞之后使用,如本例中找到了setPublickey加密函數(shù)關(guān)鍵詞,然后點(diǎn)擊谷歌開(kāi)發(fā)者工具右側(cè)的CallsStack工具觸發(fā)函數(shù)調(diào)用棧功能。
1.5算法還原
算法還原的過(guò)程即為將加密涉及的所有類庫(kù)和函數(shù)全部拷貝和復(fù)現(xiàn),實(shí)現(xiàn)整個(gè)參數(shù)加密的過(guò)程。此處可能需要用到j(luò)s調(diào)試工具,一般需要對(duì)涉及到的代碼進(jìn)行改寫(xiě),再使用易語(yǔ)言工具進(jìn)行調(diào)用;蛘咧苯诱{(diào)用js加密庫(kù),也可以直接使用易語(yǔ)言復(fù)現(xiàn)加密算法。
1.6其他協(xié)議
在網(wǎng)頁(yè)流量的數(shù)據(jù)包中,有可能存在其他協(xié)議的情況,如TCP、websocket等。websocket協(xié)議可以使用的抓包工具包括谷歌開(kāi)發(fā)工具,TCP協(xié)議一般使用wireshark、sniffer和iptool等抓包工具。
APP逆向
APP逆向的本質(zhì)也是要模擬APP端的網(wǎng)絡(luò)流量請(qǐng)求和響應(yīng)行為。
2.1抓包工具
常用的抓包工具包括fiddler、HTTPdebugger、charlse、wireshark等。
2.2抓包的目的
分析網(wǎng)絡(luò)流量的數(shù)據(jù)包和產(chǎn)生網(wǎng)絡(luò)流量的程序流。與網(wǎng)頁(yè)端檢測(cè)機(jī)制不同,APP端主要對(duì)用戶的設(shè)備進(jìn)行檢測(cè)。如本例中某些APP會(huì)對(duì)用戶的手機(jī)串號(hào)進(jìn)行檢測(cè),在之前的某條接口產(chǎn)生加密文本,后被服務(wù)器記錄,需要一直攜帶該參數(shù)進(jìn)行請(qǐng)求。如果網(wǎng)絡(luò)流量請(qǐng)求不提供該參數(shù),會(huì)被服務(wù)器拒絕訪問(wèn)。
與網(wǎng)頁(yè)端類似,這里的數(shù)據(jù)包仍然由參數(shù)和請(qǐng)求頭構(gòu)成。一般來(lái)說(shuō)cookie參數(shù)不會(huì)存在于APP端,但如果想要清除緩存清除cookie,需要通過(guò)重裝APP、新建模擬器等方式完成。
2.3加密方式的分析
在APP端常見(jiàn)的加密方式包括java加密和so加密(c和c++)。一般情況下APP端的數(shù)據(jù)包都會(huì)進(jìn)行加密,至少會(huì)攜帶一個(gè)名為sign的加密參數(shù)。
java加密的處理方式
首先通過(guò)逆向的方式獲取源代碼,然后和網(wǎng)頁(yè)端處理加密函數(shù)的方式類似,需要通過(guò)搜索進(jìn)行函數(shù)定位,最后進(jìn)行算法還原。算法還原需要復(fù)制代碼,將代碼打包成jar包,利用易語(yǔ)言調(diào)用。算法還原的另外一個(gè)方法是找js加密庫(kù),然后使用易語(yǔ)言調(diào)用進(jìn)而得到加密參數(shù)。這里需要逆向分析人員擁有java基礎(chǔ)和js基礎(chǔ)。
so加密(c和c++)加密的處理方式
類似地,需要使用ida工具定位函數(shù),用易語(yǔ)言復(fù)現(xiàn)代碼或調(diào)用js庫(kù)復(fù)現(xiàn)加密邏輯。
2.4 APP的逆向更加復(fù)雜
抓包時(shí)會(huì)面臨證書(shū)驗(yàn)證的問(wèn)題,需要安裝XPOSED模塊,其原理是對(duì)其中的java證書(shū)驗(yàn)證的函數(shù)進(jìn)行hook。如果APP不經(jīng)過(guò)代理,則需要使用httpdebuger進(jìn)行抓包。除此之外,APP端可以對(duì)APK文件進(jìn)行加殼或加固,這樣需要對(duì)目標(biāo)APK文件進(jìn)行脫殼才能看到源碼邏輯。APP端還會(huì)進(jìn)行反調(diào)試,類似于無(wú)限debug,這里也需要hook,將執(zhí)行代碼的結(jié)果返回空。應(yīng)對(duì)APP端反調(diào)試的其他方案是log輸出或進(jìn)行hook,hook技術(shù)可以對(duì)函數(shù)進(jìn)行修改。
2.5 hook技術(shù)的作用
第一可用于APP的脫殼;第二,輔助函數(shù)定位;第三,實(shí)現(xiàn)自吐算法,hook 加密庫(kù)的功能;第四,修改APP代碼做APP插件。如下圖直接通過(guò)hook方法獲取了RSA加密結(jié)果和輸入,還可以獲取函數(shù)調(diào)用棧信息。
本站(databaseit.com)部分圖文轉(zhuǎn)自網(wǎng)絡(luò),刊登本文僅為傳播信息之用,絕不代表贊同其觀點(diǎn)或擔(dān)保其真實(shí)性。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益,請(qǐng)作者持權(quán)屬證明與本網(wǎng)聯(lián)系(底部郵箱),我們將及時(shí)更正、刪除,謝謝