一種應(yīng)用程序的測(cè)試方法、裝置及測(cè)試設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測(cè)試技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序的測(cè)試方法、裝置及測(cè)試設(shè)備。
【背景技術(shù)】
[0002]當(dāng)前測(cè)試設(shè)備在對(duì)應(yīng)用程序進(jìn)行漏洞測(cè)試的過程中,通過與FUZZING測(cè)試技術(shù)相關(guān)的測(cè)試工具構(gòu)建一些非常規(guī)的,或無效的,或隨機(jī)的外部輸入數(shù)據(jù),并通過該應(yīng)用程序提供的輸入控件將所構(gòu)建的外部輸入數(shù)據(jù)提供給該應(yīng)用程序,并觀察該應(yīng)用程序的運(yùn)行情況以判定是否存在代碼缺陷。若存在代碼缺陷,即應(yīng)用程序存在與外部輸入數(shù)據(jù)相關(guān)的漏洞,會(huì)導(dǎo)致應(yīng)用程序內(nèi)存被破壞或拒絕服務(wù)或應(yīng)用程序進(jìn)程崩潰、不響應(yīng)等后果。通過FUZZING測(cè)試工具構(gòu)建的外部輸入數(shù)據(jù)的方法以及構(gòu)建結(jié)果的覆蓋度及準(zhǔn)確度會(huì)影響測(cè)試結(jié)果的覆蓋度及準(zhǔn)確度,然而,當(dāng)前FUZZING測(cè)試工具構(gòu)建的外部輸入數(shù)據(jù)不夠準(zhǔn)確,且覆蓋度不高,導(dǎo)致基于上述外部數(shù)據(jù)所產(chǎn)生的測(cè)試結(jié)果也不夠準(zhǔn)確,不能完全挖掘出應(yīng)用程序與外部輸入數(shù)據(jù)相關(guān)的漏洞。
【發(fā)明內(nèi)容】
[0003]本發(fā)明實(shí)施例提供了一種應(yīng)用程序的測(cè)試方法、裝置及測(cè)試設(shè)備。能夠?yàn)榇郎y(cè)試的應(yīng)用程序構(gòu)建更加精準(zhǔn)的外部輸入數(shù)據(jù),從而能夠更加深度的挖掘出該應(yīng)用程序存在的與外部輸入數(shù)據(jù)相關(guān)的漏洞。
[0004]—方面,本發(fā)明的實(shí)施例提供了一種應(yīng)用程序的測(cè)試方法,該方法可包括:
[0005]在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序時(shí),捕獲其他應(yīng)用程序向所述待測(cè)試應(yīng)用程序的Acti vi ty組件傳遞的Intent;
[0006]當(dāng)捕獲到所述Intent后,根據(jù)所述Intent的Extra屬性中的數(shù)據(jù)類型生成至少一個(gè)模擬Intent;
[0007]將所述至少一個(gè)模擬Intent傳遞至所述待測(cè)試應(yīng)用程序的Activity組件中;
[0008]在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)所述待測(cè)試應(yīng)用程序的運(yùn)行狀況。
[0009]作為可選的實(shí)施例,所述捕獲其他應(yīng)用程序向所述待測(cè)試應(yīng)用程序的Activity組件傳遞的Intent之前還包括:
[0010]模擬觸發(fā)操作,以觸發(fā)所述待測(cè)試應(yīng)用程序調(diào)用Intent。
[0011]作為可選的實(shí)施例,所述當(dāng)捕獲到所述Intent后,根據(jù)所述Intent的Extra屬性中的數(shù)據(jù)類型生成至少一個(gè)模擬Intent,包括:
[0012]當(dāng)捕獲到所述Intent后,解析出所述Intent的Extra屬性中攜帶的輸入數(shù)據(jù)的數(shù)據(jù)類型;
[0013]從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中調(diào)用與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù);
[0014]將所述調(diào)用的模擬輸入數(shù)據(jù)封裝為至少一個(gè)模擬Intent。
[0015]作為可選的實(shí)施例,所述從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中調(diào)用與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù)之前還包括:
[0016]生成用于指示數(shù)據(jù)區(qū)間范圍的調(diào)用腳本;
[0017]其中,所述從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中調(diào)用與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù)包括:
[0018]從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中查找到與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù)集;
[0019]按照所述調(diào)用腳本確定所述模擬輸入數(shù)據(jù)集中的模擬輸入數(shù)據(jù)區(qū)間;
[0020]調(diào)用所述模擬輸入數(shù)據(jù)區(qū)間中的模擬輸入數(shù)據(jù)。
[0021]作為可選的實(shí)施例,所述在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)所述待測(cè)試應(yīng)用程序的運(yùn)行狀況之后還包括:
[0022]統(tǒng)計(jì)引起所述待測(cè)試應(yīng)用程序的運(yùn)行狀況異常的模擬Intent;
[0023]將所述統(tǒng)計(jì)的模擬Intent中的模擬輸入數(shù)據(jù)添加至異常輸入數(shù)據(jù)庫(kù)中。
[0024]另一方面,本發(fā)明的實(shí)施例提供了一種應(yīng)用程序的測(cè)試裝置,該裝置可包括:
[0025]捕獲模塊,用于在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序時(shí),捕獲其他應(yīng)用程序向所述待測(cè)試應(yīng)用程序的Activity組件傳遞的Intent;
[0026]生成模塊,用于當(dāng)所述捕獲模塊捕獲到所述Intent后,根據(jù)所述Intent的Extra屬性中的數(shù)據(jù)類型生成至少一個(gè)模擬Intent ;
?0027] 傳遞模塊,用于將所述生成模塊生成的至少一個(gè)模擬Intent傳遞至所述待測(cè)試應(yīng)用程序的Activity組件中;
[0028]檢測(cè)模塊,用于在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)所述待測(cè)試應(yīng)用程序的運(yùn)行狀況。
[0029]作為可選的實(shí)施例,還包括:
[0030]模擬模塊,用于模擬觸發(fā)操作,以觸發(fā)所述待測(cè)試應(yīng)用程序調(diào)用Intent。
[0031]作為可選的實(shí)施例,所述生成模塊包括:
[0032]解析單元,用于當(dāng)所述捕獲模塊捕獲到所述Intent后,解析出所述Intent的Extra屬性中攜帶的輸入數(shù)據(jù)的數(shù)據(jù)類型;
[0033]調(diào)用單元,用于從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中調(diào)用與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù);
[0034]封裝單元,用于將所述調(diào)用的模擬輸入數(shù)據(jù)封裝為至少一個(gè)模擬Intent。
[0035]作為可選的實(shí)施例,所述生成模塊還包括:
[0036]生成單元,用于生成用于指示數(shù)據(jù)區(qū)間范圍的調(diào)用腳本;
[0037]其中,所述調(diào)用單元包括:
[0038]查找子單元,用于從預(yù)設(shè)的模擬輸入數(shù)據(jù)庫(kù)中查找到與所述數(shù)據(jù)類型對(duì)應(yīng)的模擬輸入數(shù)據(jù)集;
[0039]確定子單元,用于按照所述生成單元生成的調(diào)用腳本確定所述模擬輸入數(shù)據(jù)集中的模擬輸入數(shù)據(jù)區(qū)間;
[0040]調(diào)用子單元,用于調(diào)用所述模擬輸入數(shù)據(jù)區(qū)間中的模擬輸入數(shù)據(jù)。
[0041]作為可選的實(shí)施例,還包括:
[0042]統(tǒng)計(jì)模塊,用于在所述檢測(cè)模塊在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)所述待測(cè)試應(yīng)用程序的運(yùn)行狀況之后,統(tǒng)計(jì)引起所述待測(cè)試應(yīng)用程序的運(yùn)行狀況異常的模擬Intent;
[0043]添加模塊,用于將所述統(tǒng)計(jì)的模擬Intent中的模擬輸入數(shù)據(jù)添加至異常輸入數(shù)據(jù)庫(kù)中。
[0044]又一方面,本發(fā)明的實(shí)施例提供了一種測(cè)試設(shè)備,包括存儲(chǔ)器及處理器,其中,所述存儲(chǔ)器中存儲(chǔ)一組程序代碼,且所述處理器調(diào)用所述存儲(chǔ)器中存儲(chǔ)的程序代碼,用于執(zhí)行以下操作:
[0045]在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序時(shí),觸發(fā)所述待測(cè)試應(yīng)用程序從其他應(yīng)用程序中調(diào)用Intent;
[0046]當(dāng)調(diào)用到所述Intent后,根據(jù)所述Intent中的數(shù)據(jù)類型生成至少一個(gè)模擬Intent;
[0047]將所述至少一個(gè)模擬Intent傳遞至所述待測(cè)試應(yīng)用程序中的目標(biāo)組件;
[0048]在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)所述待測(cè)試應(yīng)用程序的運(yùn)行狀況。
[0049]本發(fā)明實(shí)施例中,在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序時(shí),通過捕獲其他應(yīng)用程序向所述待測(cè)試應(yīng)用程序的Acti vity組件傳遞的intent,可獲取到運(yùn)行過程中真實(shí)的Intent,基于該真實(shí)的Intent的Extra屬性中所對(duì)應(yīng)的數(shù)據(jù)類型,可生成至少一個(gè)模擬Intent??蓪⑸傻哪MIntent傳遞至待測(cè)試應(yīng)用程序中的Activity組件中,并可在預(yù)設(shè)時(shí)間范圍內(nèi)檢測(cè)該待測(cè)試應(yīng)用程序的運(yùn)行狀況,以檢測(cè)通過Intent構(gòu)造的外部輸入數(shù)據(jù)是否會(huì)引起待測(cè)試應(yīng)用程序的異常運(yùn)行。通過上述方式,生成的模擬Intent相對(duì)于FUZZING測(cè)試工具生成的外部輸入數(shù)據(jù)精準(zhǔn)性更高。從而能夠?yàn)榇郎y(cè)試的應(yīng)用程序構(gòu)建更加精準(zhǔn)的外部輸入數(shù)據(jù),并能夠更加深度的挖掘出該應(yīng)用程序存在的與外部輸入數(shù)據(jù)相關(guān)的漏洞。
【附圖說明】
[0050]為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0051]圖1是本發(fā)明中的一種應(yīng)用程序的測(cè)試方法的一實(shí)施例的流程圖;
[0052]圖2是本發(fā)明中的一種應(yīng)用程序的測(cè)試方法的另一實(shí)施例的流程圖;
[0053]圖3是本發(fā)明中的一種應(yīng)用程序的測(cè)試裝置的一實(shí)施例的結(jié)構(gòu)示意圖;
[0054]圖4是本發(fā)明中的一種應(yīng)用程序的測(cè)試裝置的另一實(shí)施例的結(jié)構(gòu)示意圖;
[0055]圖5是本發(fā)明中的一種測(cè)試設(shè)備的一實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0056]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0057]下面參考附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。其中,本發(fā)明實(shí)施例所述裝置或設(shè)備包括能夠安裝虛擬機(jī)系統(tǒng),并能夠?qū)?yīng)用程序通過安裝的虛擬機(jī)系統(tǒng)進(jìn)行測(cè)試的終端或設(shè)備。
[0058]參見圖1,圖1為本發(fā)明中的一種應(yīng)用程序的測(cè)試方法的一實(shí)施例的流程圖。該方法可包括以下步驟。
[0059]步驟SlOl,在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序時(shí),捕獲其他應(yīng)用程序向所述待測(cè)試應(yīng)用程序的Acti vity組件傳遞的Intent。
[0060]在一個(gè)實(shí)施例中,通過在虛擬機(jī)系統(tǒng)中運(yùn)行待測(cè)試應(yīng)用程序,可捕獲其他應(yīng)用程序向該待測(cè)試應(yīng)用程序的Activity組件傳遞的Intent。具體的,Activity組件(中文:活動(dòng)組件)作為應(yīng)用程序組件中的其中之一,主要負(fù)責(zé)用戶交互。其中,Activity組件之間的通信通過Intent (中文:意圖)傳遞。Intent中封裝兩個(gè)組件需要通信的信息或數(shù)據(jù)等。Intent存在以下幾個(gè)屬性:Component ,Act1n ,Category,Data,Type ,Extra,F(xiàn)lag七個(gè)屬性,其中Component屬性用來指定需要啟動(dòng)的目標(biāo)組件,Extra屬性用于攜帶需要交換的數(shù)據(jù)。本發(fā)明實(shí)施例中,所捕獲的Intent的目標(biāo)組件即為待測(cè)試應(yīng)用程序的Activity組件??蛇x的,可通過模擬觸發(fā)操作,觸發(fā)待