[0136]cl、判斷當(dāng)前的行文件不是源程序代碼的文件尾行,則返回執(zhí)行步驟al,否則跳至步驟dl。
[0137]dl、針對(duì)匹配獲得intent調(diào)用方法進(jìn)行檢測處理。該測試處理過程包括如下實(shí)施步驟:首先,將上述bl至cl中所記錄的具有劫持風(fēng)險(xiǎn)的源代碼文本信息提交給自動(dòng)構(gòu)造的intent檢測模塊,該intent檢測模塊構(gòu)造intent請(qǐng)求發(fā)送到應(yīng)用程序的系統(tǒng)中;然后,通過檢測是否成功返回?cái)?shù)據(jù),或者額檢測返回?cái)?shù)據(jù)是否為空來確定intent程序是否具有劫持漏洞,如果有數(shù)據(jù)成功返回,或者不僅成功返回?cái)?shù)據(jù)且返回?cái)?shù)據(jù)不為空,則說明劫持成功,反之,該intent程序不具有劫持漏洞;最后,移動(dòng)終端可以獲得到存在劫持成功的intent程序集合作為本系統(tǒng)的最終檢測結(jié)果。
[0138]el、清理臨時(shí)文件。即清理逆向工程處理過程中生成的臨時(shí)文件,以減少系統(tǒng)資源浪費(fèi)。
[0139]由此可知,上述實(shí)例實(shí)現(xiàn)了一種在自動(dòng)化逆向Android應(yīng)用安裝包,轉(zhuǎn)換為java源代碼程序,并獲取Android平臺(tái)中用于檢測調(diào)用程序(例如intent)是否安全的規(guī)則集之后,通過自動(dòng)發(fā)送intent請(qǐng)求到Android應(yīng)用以檢測是否安全的方法。
[0140]在本申請(qǐng)?zhí)峁┑牧硗庖环N實(shí)施例中,在安卓Android操作系統(tǒng)中,以調(diào)用程序?yàn)閺V播為例,檢測廣播是否具有劫持漏洞的檢測過程同樣可以分為第三部分:第一部分,可以通過對(duì)應(yīng)用程序的安裝壓縮包APK進(jìn)行逆向工程處理,得到應(yīng)用程序的源代碼(即java源代碼集合)和系統(tǒng)清單文件(即注冊(cè)廣播的AndroidManifest.xml文件);第二部分,通過按照組件調(diào)用漏洞規(guī)則文件對(duì)應(yīng)用程序的源代碼文件進(jìn)行匹配,獲得了由具有劫持風(fēng)險(xiǎn)的廣播構(gòu)成的廣播調(diào)用風(fēng)險(xiǎn)列表,上述組件調(diào)用漏洞規(guī)則文件保存了具有劫持風(fēng)險(xiǎn)的調(diào)用程序所包含的特征數(shù)據(jù);第三部分,根據(jù)獲得的廣播調(diào)用風(fēng)險(xiǎn)列表,模擬調(diào)用程序?qū)?yīng)的測試廣播,檢測應(yīng)用程序返回?cái)?shù)據(jù),在廣播接收器成功返回調(diào)用結(jié)果或者返回的調(diào)用結(jié)果不為空的情況下,則確定當(dāng)前檢測的廣播具備劫持漏洞,如果廣播接收器未返回調(diào)用結(jié)果或者返回的調(diào)用結(jié)果為空,則確定當(dāng)前檢測的廣播不具備劫持漏洞。
[0141]檢測系統(tǒng)具體流程如下:
[0142]首先,輸入Android應(yīng)用的APK安裝包,并獲取組件調(diào)用漏洞規(guī)則文件的廣播組件漏洞規(guī)則,可以通過特征數(shù)據(jù)進(jìn)行表征上述組件調(diào)用漏洞規(guī)則。如前所述,通過該組件調(diào)用漏洞規(guī)則匹配得到調(diào)用風(fēng)險(xiǎn)列表可以包括三種方式。
[0143]然后,通過APK逆向模塊接收APK安裝包,通過逆向反編譯轉(zhuǎn)換為java源代碼文件集:
[0144](1)、解壓縮APK安裝包,獲取classes, dex文件。
[0145](2)、使用 dex2jar 程序,轉(zhuǎn)換 classes, dex 為 jar 文件。
[0146](3)、解壓縮jar文件,得到class類文件及其目錄結(jié)構(gòu)。
[0147](4)、批量反編譯class類文件,得到j(luò)ava源文件及其目錄結(jié)構(gòu)。
[0148]接著,針對(duì)java源代碼文件目錄結(jié)構(gòu)中的一個(gè)未檢查的java源代碼文件,打開文件,并執(zhí)行以下操作:
[0149]a2、按行讀取源代碼文件的內(nèi)容,讀取下一行(或首行)文本內(nèi)容,并執(zhí)行b2。
[0150]b2、將組件調(diào)用漏洞規(guī)則文件中記錄的可以用于確定intent調(diào)用程序具有劫持風(fēng)險(xiǎn)的特征數(shù)據(jù)作為規(guī)則,與源代碼文件的內(nèi)容進(jìn)行匹配(若規(guī)則需多行匹配,自動(dòng)讀取后續(xù)行文本),若正確匹配,則記錄注冊(cè)的特征數(shù)據(jù)在源程序代碼文本中的源代碼行文本,并跳至d2;否則跳至c2。
[0151]c2、判斷當(dāng)前的行文件不是源程序代碼的文件尾行,則返回執(zhí)行步驟a2,否則跳至步驟d2。
[0152]d2、針對(duì)匹配獲得廣播調(diào)用方法進(jìn)行檢測處理。該測試處理過程包括如下實(shí)施步驟:首先,將上述b2至c2中所記錄的具有劫持風(fēng)險(xiǎn)的源代碼文本信息,即將調(diào)用風(fēng)險(xiǎn)列表(例如intent風(fēng)險(xiǎn)列表)提交給自動(dòng)構(gòu)造的intent檢測模塊;然后,根據(jù)檢測出來的上述調(diào)用風(fēng)險(xiǎn)列表(例如intent風(fēng)險(xiǎn)列表),提取調(diào)用風(fēng)險(xiǎn)列表中對(duì)應(yīng)目標(biāo)程序中的broadcast (廣播)名稱,并根據(jù)這個(gè)廣播名稱,在應(yīng)用程序中注冊(cè)廣播接收器;接著,根據(jù)獲取到的目標(biāo)程序模擬發(fā)送的測試廣播至應(yīng)用程序,并檢測該廣播中是否包含調(diào)用程序的數(shù)據(jù)(可以是作為調(diào)用測試程序的intent數(shù)據(jù));最后,通過檢測廣播中是否包含有調(diào)用測試程序,以及檢測解析調(diào)用測試程序包含的參數(shù)數(shù)據(jù),來確定廣播是否具有被劫持的風(fēng)險(xiǎn),其中,如果廣播中包含有調(diào)用測試程序,且作為調(diào)用測試程序的intent數(shù)據(jù)所包含的參數(shù)數(shù)據(jù)不為空,則說明包含了調(diào)用測試程序的廣播存在數(shù)據(jù)泄露的風(fēng)險(xiǎn),如果廣播中不包含調(diào)用測試程序,或者雖然包含調(diào)用測試程序但作為調(diào)用測試程序的intent數(shù)據(jù)所包含的參數(shù)數(shù)據(jù)是空,則可以確認(rèn)上述廣播不存在數(shù)據(jù)泄露的風(fēng)險(xiǎn)。
[0153]e2、清理臨時(shí)文件。
[0154]上述實(shí)施例中,通過清理逆向工程處理過程中生成的臨時(shí)文件,可以減少系統(tǒng)資源浪費(fèi)。
[0155]由此可知,本申請(qǐng)實(shí)現(xiàn)了一種在自動(dòng)化逆向Android應(yīng)用安裝包,轉(zhuǎn)換為java源代碼程序,并獲取Android平臺(tái)中用于檢測調(diào)用程序(例如包含有intent數(shù)據(jù)的廣播)是否安全的規(guī)則集之后,通過自動(dòng)發(fā)送廣播請(qǐng)求到Android應(yīng)用以檢測是否安全的方法。
[0156]需要說明的是,對(duì)于前述的各方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
[0157]通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如R0M/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
[0158]實(shí)施例2
[0159]根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述方法實(shí)施例的裝置實(shí)施例。圖5是根據(jù)本發(fā)明實(shí)施例二的組件調(diào)用漏洞的檢測裝置的示意圖。
[0160]如圖5所示,該組件調(diào)用漏洞的檢測裝置可以包括:獲取模塊50、構(gòu)建模塊52和檢測模塊54。
[0161]其中,獲取模塊50,用于獲取應(yīng)用程序的源代碼文件和組件調(diào)用漏洞規(guī)則文件;構(gòu)建模塊52,用于按照組件調(diào)用漏洞規(guī)則文件從應(yīng)用程序的源代碼文件中提取具有劫持風(fēng)險(xiǎn)的調(diào)用程序,構(gòu)成調(diào)用風(fēng)險(xiǎn)列表,其中,組件調(diào)用漏洞規(guī)則文件用于保存確定調(diào)用程序具有劫持風(fēng)險(xiǎn)的特征數(shù)據(jù);檢測模塊54,用于基于調(diào)用風(fēng)險(xiǎn)列表自動(dòng)構(gòu)造調(diào)用檢測模塊,并基于調(diào)用檢測模塊檢測調(diào)用風(fēng)險(xiǎn)列表中的調(diào)用程序,獲取調(diào)用程序的安全檢測結(jié)果。
[0162]本申請(qǐng)上述實(shí)施例提供了一種自動(dòng)化檢測Android操作系統(tǒng)中調(diào)用程序(Intent)劫持漏洞檢測的通用裝置。上述方案根據(jù)組件調(diào)用漏洞規(guī)則庫中的特征數(shù)據(jù)確定具有劫持風(fēng)險(xiǎn)的調(diào)用程序,構(gòu)成調(diào)用風(fēng)險(xiǎn)列表,然后通過調(diào)用檢測模塊對(duì)調(diào)用風(fēng)險(xiǎn)列表中的調(diào)用程序進(jìn)行安全監(jiān)測,最終獲取安全監(jiān)測結(jié)果。
[0163]由此可知,本申請(qǐng)上述實(shí)施例中,在對(duì)應(yīng)用程序的源程序代碼進(jìn)行特征匹配之后,可以得到具有高風(fēng)險(xiǎn)被劫持的調(diào)用程序的文件集合,針對(duì)這些調(diào)用程序,通過構(gòu)造對(duì)應(yīng)的測試裝置,來實(shí)現(xiàn)調(diào)用程序的自動(dòng)化測試方法,可以構(gòu)造測試調(diào)用程序發(fā)送給相應(yīng)的應(yīng)用程序,通過應(yīng)用程序的組件反饋的結(jié)果來確定應(yīng)用程序中對(duì)于的調(diào)用程序是否安全,由此解決了現(xiàn)有技術(shù)無法確定系統(tǒng)的組件調(diào)用程序存在劫持風(fēng)險(xiǎn)的技術(shù)問題,從而可以確定當(dāng)前應(yīng)用程序中的調(diào)用組件或者調(diào)用程序具有高風(fēng)險(xiǎn)被劫持。
[0164]此處需要說明的是,本申請(qǐng)上述實(shí)施例所提供的獲取模塊50、構(gòu)建模塊52和檢測模塊54可以在安裝了 Android操作系統(tǒng)的移動(dòng)終端上運(yùn)行,實(shí)施過程中,在上述實(shí)施例中的移動(dòng)終端可以是安裝了 Android操作系統(tǒng)之后的客戶端,以在本申請(qǐng)以安卓Android操作系統(tǒng)為例,上述裝置所示的實(shí)施例實(shí)現(xiàn)了檢測應(yīng)用程序中注入的調(diào)用程序的安全檢測結(jié)果的過程,其中,檢測過程可以主要包括:在將Android應(yīng)用程序的安裝包通過逆向工程技術(shù)轉(zhuǎn)換為java源代碼集之后,可以根據(jù)預(yù)先設(shè)定并保存在規(guī)則庫中的組件調(diào)用漏洞規(guī)則文件來篩選具有劫持風(fēng)險(xiǎn)的調(diào)用程序,確定具有高劫持風(fēng)險(xiǎn)的,未進(jìn)行校驗(yàn)的調(diào)用風(fēng)險(xiǎn)列表。
[0165]此處需要說明的是,本申請(qǐng)上述實(shí)施例提供的獲取模塊50、構(gòu)建模塊52和檢測模塊54與實(shí)施例一中提供的方法步驟S20至步驟S26具有相同的應(yīng)用場景,但不限于方法提供的示例。而且上述各個(gè)模塊可以作為硬件的一部分運(yùn)行在圖1所示的移動(dòng)終端。
[0166]本申請(qǐng)?zhí)峁┑难b置實(shí)施例中,特征數(shù)據(jù)可以包括任意一個(gè)或多個(gè)特征:調(diào)用程序的隱式調(diào)用特征、廣播類、發(fā)送廣播標(biāo)志、以及調(diào)用程序的顯式調(diào)用特征,其中,如圖6所示,該構(gòu)建模塊52可以包括如下任意一種或多種提取模塊:第一提取模塊521、第二提取模塊523、第三提取模塊525。
[0167]第一提取模塊521,用于從應(yīng)用程序的源代碼文件中提取包含有隱式調(diào)用特征的源代碼,得到具有劫持風(fēng)險(xiǎn)的調(diào)用程序。
[0168]第二提取模塊523,用于從應(yīng)用程序的源代碼文件中提取包含有廣播類、發(fā)送廣播標(biāo)志和調(diào)用程序的隱式調(diào)用特征的源代碼,,得到具有劫持風(fēng)險(xiǎn)的調(diào)用程序。
[0169]第三提取模塊525,用于從應(yīng)用程序的源代碼文件中提取不包含有顯式調(diào)用特征的源代碼,得到具有劫持風(fēng)險(xiǎn)的調(diào)用程序。
[0170]此處需要說明的是,本申請(qǐng)上述實(shí)施例提供的各個(gè)提取模塊與實(shí)施例一中提供的三種獲取調(diào)用風(fēng)險(xiǎn)列表的方式具有相同的應(yīng)用場景,但不限于方法提供的示例。而且上述各個(gè)模塊可以作為硬件的一部分運(yùn)行在圖1所示的移動(dòng)終端。
[0171]優(yōu)選地,如圖7所示,本申請(qǐng)?zhí)峁┑囊环N可選實(shí)施例中,上述檢測模塊54可以包括:第一模擬模塊541a、第一注入模塊543a、第一發(fā)送模塊545a、第一確定模塊547a和第二確定模塊549a。
[0172]其中,第一模擬模塊541a,用于通過調(diào)用檢測模塊模擬調(diào)用風(fēng)險(xiǎn)列表中的調(diào)用程序,得到調(diào)用程序?qū)?yīng)的調(diào)用測試程序;第一注入模塊543a,用于將調(diào)用測試程序傳入應(yīng)用程序;第一發(fā)送模塊545a,用于根據(jù)調(diào)用測試程序發(fā)送調(diào)用請(qǐng)求至應(yīng)用程序;第一確定模塊547a,用于如果應(yīng)用程序成功