两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

測(cè)試樣本的生成方法及裝置與流程

文檔序號(hào):11233990閱讀:1614來源:國知局
測(cè)試樣本的生成方法及裝置與流程

本發(fā)明涉及軟件安全領(lǐng)域,具體而言,涉及一種測(cè)試樣本的生成方法及裝置。



背景技術(shù):

在軟件測(cè)試(fuzz測(cè)試)中,評(píng)價(jià)測(cè)試效果的一個(gè)重要指標(biāo)是代碼覆蓋率,也就是測(cè)試樣本集合可達(dá)的程序執(zhí)行路徑占程序代碼所有路徑的百分比。

相關(guān)技術(shù)中的fuzz工具大體上可歸為兩類,盲測(cè)(blindfuzz)和智能測(cè)試(smartfuzz)。blindfuzz通過隨機(jī)修改文件中的數(shù)據(jù)生成測(cè)試樣本,smartfuzz通過解析文件格式生成文件模板,根據(jù)模板中文件字段的類型進(jìn)行變異,生成測(cè)試樣本。

這兩類fuzz本質(zhì)上來講都是以窮舉的方式發(fā)現(xiàn)被測(cè)試程序的執(zhí)行路徑,在測(cè)試的初期可以發(fā)現(xiàn)較多的路徑,但隨著fuzz的進(jìn)行,樣本文件不斷增大,隨機(jī)變異的效果越來越差,越來越難以發(fā)現(xiàn)新的執(zhí)行路徑。

相關(guān)技術(shù)中的fuzz工具使用的樣本生成策略,還停留在盲目變異的層次,一次變異產(chǎn)生的樣本對(duì)程序執(zhí)行流程的影響是未知的。盡管引入了改良的算法對(duì)變異后的樣本進(jìn)行了篩選,在發(fā)現(xiàn)新的程序執(zhí)行路徑方面提高有限,這在fuzz的后期樣本文件變化很大時(shí)尤為明顯,代碼覆蓋率仍然不高。

針對(duì)上述的問題,目前尚未提出有效的解決方案。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供了一種測(cè)試樣本的生成方法及裝置,以至少解決相關(guān)技術(shù)中生成的測(cè)試樣本存在代碼覆蓋率低的技術(shù)問題。

根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種測(cè)試樣本的生成方法,包括:獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為所述指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);根據(jù)關(guān)鍵數(shù)據(jù)的信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測(cè)試樣本。

根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種測(cè)試樣本的生成裝置,包括:獲取 模塊,用于獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);變異模塊,用于根據(jù)關(guān)鍵數(shù)據(jù)的信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本;確定模塊,用于將變異后的指定樣本確定為測(cè)試樣本。

在本發(fā)明實(shí)施例中,采用根據(jù)獲取的指定樣本中的關(guān)鍵數(shù)據(jù)的信息,對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測(cè)試樣本的方式,即通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)的變異,生成測(cè)試樣本,實(shí)現(xiàn)了對(duì)指定樣本的精確變異,減少了無意義的樣本的生成,進(jìn)而提高了代碼覆蓋率,進(jìn)而解決了相關(guān)技術(shù)中生成的測(cè)試樣本存在代碼覆蓋率低的技術(shù)問題。

附圖說明

此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:

圖1是本申請(qǐng)實(shí)施例的一種測(cè)試樣本的生成方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖;

圖2是根據(jù)本申請(qǐng)實(shí)施例1的測(cè)試樣本的生成方法的流程圖;

圖3是根據(jù)本申請(qǐng)可選實(shí)施例的測(cè)試樣本生成的方法的過程一的流程圖;

圖4是根據(jù)本申請(qǐng)可選實(shí)施例的測(cè)試樣本生成的方法的過程二的流程圖;

圖5是根據(jù)本申請(qǐng)實(shí)施例的測(cè)試樣本的生成裝置的結(jié)構(gòu)框圖;

圖6是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。

具體實(shí)施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。

需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在 這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

fuzz測(cè)試是挖掘軟件安全漏洞的重要技術(shù),其中測(cè)試樣本的生成直接影響了fuzz的效果,當(dāng)前fuzz樣本的生成技術(shù)存在代碼覆蓋率低的缺陷,如何生成更有效的測(cè)試樣本,是當(dāng)前的一個(gè)研究重點(diǎn)。

afl-fuzz是lcamtuf所開發(fā)的一款fuzz工具,引入了遺傳算法的概念,對(duì)內(nèi)置fuzz策略生成的測(cè)試樣本進(jìn)行評(píng)估,優(yōu)化測(cè)試樣本生成過程。afl-fuzz需要對(duì)被測(cè)試程序重新編譯,在程序的分支指令處進(jìn)行插樁,插樁代碼用來記錄程序單次執(zhí)行時(shí)的內(nèi)部執(zhí)行路徑。對(duì)于閉源軟件,afl-fuzz使用qemu模擬執(zhí)行被測(cè)試程序,獲取程序的內(nèi)部執(zhí)行路徑。結(jié)合程序的執(zhí)行路徑信息,afl-fuzz使用遺傳算法優(yōu)化測(cè)試樣本的生成過程,基本過程如下:

但上述afl-fuzz使用遺傳算法優(yōu)化測(cè)試樣本是其仍然存在代碼覆蓋率不高的問題。

在詳細(xì)說明本申請(qǐng)實(shí)施例之前,先介紹一下本申請(qǐng)實(shí)施例中所涉及的技術(shù)術(shù)語:

1,fuzz測(cè)試:即模糊測(cè)試,是一種通過提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件安全漏洞的方法。模糊測(cè)試的過程是通過自動(dòng)的或半自動(dòng)的方法,反復(fù)驅(qū)動(dòng)目標(biāo)軟件運(yùn)行并為其提供構(gòu)造的輸入數(shù)據(jù),同時(shí)監(jiān)控軟件運(yùn)行的異常結(jié)果。

2,fuzz樣本:被測(cè)試程序讀入并進(jìn)行處理的文件。

3,變異:修改樣本文件生成新的樣本文件的過程。

4,代碼覆蓋率:被測(cè)試程序?qū)嶋H執(zhí)行代碼的數(shù)量與程序總的代碼數(shù)量的比值。

5,afl-fuzz:lcamtuf開發(fā)的開源fuzz測(cè)試工具。

6,污染傳播:對(duì)原始數(shù)據(jù)打上污染標(biāo)記,確定數(shù)據(jù)在程序代碼中流向的技術(shù)。

實(shí)施例1

根據(jù)本發(fā)明實(shí)施例,還提供了一種測(cè)試樣本的生成方法的方法實(shí)施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

本申請(qǐng)實(shí)施例1所提供的方法實(shí)施例可以在移動(dòng)終端、計(jì)算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計(jì)算機(jī)終端上為例,圖1是本申請(qǐng)實(shí)施例的一種測(cè)試樣本的生成方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖。如圖1所示,計(jì)算機(jī)終端10可以包括一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器104、以及用于通信功能的傳輸裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。

存儲(chǔ)器104可用于存儲(chǔ)應(yīng)用軟件的軟件程序以及模塊,如本發(fā)明實(shí)施例中的測(cè)試樣本的生成方法對(duì)應(yīng)的程序指令/模塊,處理器102通過運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的測(cè)試樣本的生成方法。存儲(chǔ)器104可包括高速隨機(jī)存儲(chǔ)器,還可包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器104可進(jìn)一步包括相對(duì)于處理器102遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過網(wǎng)絡(luò)連接至計(jì)算機(jī)終端10。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。

傳輸裝置106用于經(jīng)由一個(gè)網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實(shí)例可包括計(jì)算機(jī)終端10的通信供應(yīng)商提供的無線網(wǎng)絡(luò)。在一個(gè)實(shí)例中,傳輸裝置106包括一個(gè)網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝巳鐖D2所示的測(cè)試樣本的生成方法。圖2是根據(jù)本申請(qǐng)實(shí)施例1的測(cè)試樣本的生成方法的流程圖。如圖2所示,該方法包括:

步驟s202,獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為所述指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);

需要說明的是,關(guān)鍵數(shù)據(jù)污染被測(cè)試程序的分支指令可以是表現(xiàn)為直接污染和間接污染,比如,該分支指令為ifelse指令,在被測(cè)試程序執(zhí)行到分支指令之前,該關(guān)鍵數(shù)據(jù)并未做相應(yīng)運(yùn)算(比如加減乘除等),而是直接傳播至該分支指令,此時(shí)可以稱之為直接污染;而在被測(cè)試程序執(zhí)行到分支指令之前,該關(guān)鍵數(shù)據(jù)已經(jīng)與其他的數(shù)據(jù)做了相應(yīng)的運(yùn)算(比如加減乘除等)得到了運(yùn)算后的數(shù)據(jù),該運(yùn)算后的數(shù)據(jù)傳播至該分支指令,此時(shí)可以稱之為間接污染。

需要說明的是,上述關(guān)鍵數(shù)據(jù)的信息可以用于指示上述關(guān)鍵數(shù)據(jù)在指定樣本中的特征信息,該特征信息可以是上述關(guān)鍵數(shù)據(jù)的長度和上述關(guān)鍵數(shù)據(jù)在指定樣本中的位置,但并不限于此。通過該關(guān)鍵數(shù)據(jù)的信息可以在指定樣本中找到與該信息匹配的關(guān)鍵數(shù)據(jù)。

在本申請(qǐng)的一個(gè)實(shí)施例中,上述步驟s202可以表現(xiàn)為將指定樣本標(biāo)記為污染源;將污染源作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;獲取污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)在指定樣本中的位置和長度,得到關(guān)鍵數(shù)據(jù)的信息。通過污染傳播技術(shù)來確定指定樣本中哪些數(shù)據(jù)對(duì)被測(cè)試程序的執(zhí)行流程產(chǎn)生影響,即通過污染傳播技術(shù)來確定指定樣本中哪些數(shù)據(jù)是上述關(guān)鍵數(shù)據(jù),即污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)為關(guān)鍵數(shù)據(jù)。

進(jìn)一步地,獲取污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)在指定樣本中的位置和長度可以包括:在執(zhí)行被測(cè)試程序的過程中,當(dāng)執(zhí)行到分支指令時(shí),檢測(cè)分支指令是否被污染源污染;如果檢測(cè)到分支指令被污染源污染,記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度。

需要說明的是,此處分支指令是否被污染源污染的表現(xiàn)形式,與關(guān)鍵數(shù)據(jù)是否污染被測(cè)試程序的表現(xiàn)形式類似,此處不再贅述。

需要說明的是,在記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度之后,還可以繼續(xù)執(zhí)行上述被測(cè)試程序,并在繼續(xù)執(zhí)行上述被測(cè)試程序的過程中執(zhí)行以下處理過程,直至被測(cè)試程序執(zhí)行結(jié)束:檢測(cè)被測(cè)試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數(shù)據(jù)在指定樣本中的位置和長度。即可以通過將被測(cè)試程序執(zhí)行結(jié)束,記錄污染源(指定樣本)中所有的關(guān)鍵數(shù)據(jù)的信息, 以能夠獲取指定樣本中所有的關(guān)鍵數(shù)據(jù),進(jìn)而在后續(xù)生成測(cè)試樣本時(shí),能夠生成多個(gè)不同的測(cè)試樣本。

步驟s204,根據(jù)關(guān)鍵數(shù)據(jù)的信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本。

需要說明的是,根據(jù)信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異可以表現(xiàn)為通過該關(guān)鍵數(shù)據(jù)的信息在指定樣本中找到關(guān)鍵數(shù)據(jù),在對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,但并不限于此。

需要說明的是,此處的變異是指修改關(guān)鍵數(shù)據(jù)生成新的關(guān)鍵數(shù)據(jù),而在指定樣本中用生成的新的關(guān)鍵數(shù)據(jù)代替該變異前的關(guān)鍵數(shù)據(jù),進(jìn)而得到變異后的指定樣本。即步驟s204通過只對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)進(jìn)行變異,進(jìn)而減少了變異的范圍,同時(shí)減少了無意義的樣本的生成。

步驟s206,將變異后的指定樣本確定為測(cè)試樣本。

需要說明的是,上述測(cè)試樣本可以是能夠觸發(fā)被測(cè)試程序出現(xiàn)新的代碼執(zhí)行路徑的變異后的指定樣本,即通過將變異后的指定樣本作為被測(cè)試程序的輸入,在被測(cè)試程序的執(zhí)行過程中如果檢測(cè)到新的代碼執(zhí)行路徑就認(rèn)為該變異后的指定樣本可以作為該測(cè)試樣本。具體的,上述步驟s206可以表現(xiàn)為:以變異后的指定樣本作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;在執(zhí)行被測(cè)試程序的過程中,如果檢測(cè)到新的代碼執(zhí)行路徑,則將變異后的指定樣本確定為測(cè)試樣本;其中,新的代碼執(zhí)行路徑為指定樣本作為被測(cè)試程序的輸入時(shí),與被測(cè)試程序執(zhí)行的代碼執(zhí)行路徑不同的執(zhí)行路徑。

需要說明的是,由于可以通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)進(jìn)行變異,變異后的指定樣本作為被測(cè)試程序的輸入,在被測(cè)試程序的執(zhí)行過程中如果發(fā)現(xiàn)新的代碼執(zhí)行路徑,則該變異后的指定樣本可以作為測(cè)試樣本,因而從該角度上出發(fā),指定樣本中的關(guān)鍵數(shù)據(jù)能夠影響被測(cè)試程序的代碼執(zhí)行路徑,也就能夠影響被測(cè)試程序的執(zhí)行流程,進(jìn)而該關(guān)鍵數(shù)據(jù)也可以描述為指定樣本中對(duì)被測(cè)試程序的執(zhí)行流程產(chǎn)生影響的數(shù)據(jù)。

通過上述步驟,采用根據(jù)獲取的指定樣本中的關(guān)鍵數(shù)據(jù)的信息,對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測(cè)試樣本的方式,即通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)的變異,生成測(cè)試樣本,實(shí)現(xiàn)了對(duì)指定樣本的精確變異,減少了無意義的樣本的生成,進(jìn)而提高了代碼覆蓋率,進(jìn)而解決了相關(guān)技術(shù)中生成的測(cè)試樣本存在代碼覆蓋率低的技術(shù)問題。

為了更好的理解本申請(qǐng),以下結(jié)合可選的實(shí)施例對(duì)本申請(qǐng)實(shí)施例作進(jìn)一步解釋。

本申請(qǐng)?zhí)峁┝艘环N測(cè)試樣本生成的方法的可選實(shí)施例,主要包括兩個(gè)過程:過程 一:利用污染傳播技術(shù)確定原始樣本(即上述實(shí)施例中的指定樣本)中哪些數(shù)據(jù)對(duì)被測(cè)試程序的執(zhí)行流程產(chǎn)生影響;過程二:利用過程一確定的原始樣本中對(duì)被測(cè)試程序的執(zhí)行流程產(chǎn)生影響的數(shù)據(jù),對(duì)原始樣本進(jìn)行精確變異,生成可觸發(fā)被測(cè)試程序的新的代碼執(zhí)行路徑的樣本,并加入樣本池。

對(duì)于過程一,圖3是根據(jù)本申請(qǐng)可選實(shí)施例的測(cè)試樣本生成的方法的過程一的流程圖,如圖3所示,該過程一具體包括以下步驟:

步驟s302,挑選樣本,將文件標(biāo)記為污染源,開啟污染傳播記錄:開啟指令級(jí)別的污染傳播記錄監(jiān)控程序,加載被測(cè)試程序;將樣本文件內(nèi)容標(biāo)記為污染源(相當(dāng)于上述實(shí)施例中的將指定樣本標(biāo)記為污染源);需要說明的是,該樣本文件內(nèi)容為原始樣本文件的內(nèi)容;

步驟s304,執(zhí)行被測(cè)試程序;

步驟s306,對(duì)當(dāng)前指令進(jìn)行檢查,如果是分支指令,執(zhí)行步驟s308,否則執(zhí)行步驟s312;

步驟s308,檢查分支條件是否受到樣本文件數(shù)據(jù)污染,如果是,執(zhí)行步驟s310,否則執(zhí)行步驟s312;

步驟s310,記錄污染源在樣本文件內(nèi)容中的位置和長度,執(zhí)行步驟s304;

步驟s312,判斷被測(cè)試程序是否執(zhí)行結(jié)束,如果是,執(zhí)行步驟s314,否則,執(zhí)行步驟s304;

步驟s314,保存樣本中影響程序分支的信息。

需要說明的是,該過程一相當(dāng)于上述實(shí)施例中的步驟s202。

對(duì)于過程二,圖4是根據(jù)本申請(qǐng)可選實(shí)施例的測(cè)試樣本生成的方法的過程二的流程圖,如圖4所示,該過程二具體包括以下步驟:

步驟s402,fuzz程序讀入原始樣本(相當(dāng)于上述實(shí)施例中的指定樣本);

步驟s404,根據(jù)過程一得到的信息(相當(dāng)于上述實(shí)施例中的關(guān)鍵數(shù)據(jù)的信息,即過程一中的污染源在樣本文件內(nèi)容中的位置和長度)對(duì)樣本的關(guān)鍵數(shù)據(jù)進(jìn)行變異;

步驟s406,執(zhí)行被測(cè)試程序,記錄執(zhí)行路徑;

步驟s408,是否發(fā)現(xiàn)新的代碼執(zhí)行路徑,在發(fā)現(xiàn)新的代碼執(zhí)行路徑的情況下,執(zhí)行步驟s410,否則執(zhí)行步驟s404;

步驟s410,將本次變異生成的樣本添加到樣本池,執(zhí)行步驟s404。

需要說明的是,上述步驟s402至步驟s404,相當(dāng)于上述實(shí)施例中的步驟s204;步驟s406至步驟s410,相當(dāng)于上述實(shí)施例中的步驟s206。

上述可選實(shí)施例利用污染傳播技術(shù)確定原始樣本的文件中影響程序分支的關(guān)鍵數(shù)據(jù),針對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行精確變異,生成fuzz樣本,可以更快地發(fā)現(xiàn)新的程序執(zhí)行路徑。即引入污染傳播技術(shù),通過污染傳播追蹤樣本數(shù)據(jù)對(duì)程序執(zhí)行流的影響,確定影響程序分支的文件數(shù)據(jù),在生成新的測(cè)試樣本時(shí)只對(duì)影響程序分支的數(shù)據(jù)進(jìn)行變異。本方案的樣本生成策略實(shí)現(xiàn)了精確變異,可減少無意義的樣本生成,在短時(shí)間內(nèi)達(dá)到很高的代碼覆蓋率。

需要說明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(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ā)明所必須的。

通過以上的實(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ì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。

實(shí)施例2

根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述測(cè)試樣本的生成方法的裝置,圖5是根據(jù)本申請(qǐng)實(shí)施例的測(cè)試樣本的生成裝置的結(jié)構(gòu)框圖,如圖5所示,該裝置包括:

獲取模塊52,用于獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);

需要說明的是,關(guān)鍵數(shù)據(jù)污染被測(cè)試程序的分支指令可以是表現(xiàn)為直接污染和間接污染,比如,該分支指令為ifelse指令,在被測(cè)試程序執(zhí)行到分支指令之前,該關(guān)鍵數(shù)據(jù)并未做相應(yīng)運(yùn)算(比如加減乘除等),而是直接傳播至該分支指令,此時(shí)可以稱之為直接污染;而在被測(cè)試程序執(zhí)行到分支指令之前,該關(guān)鍵數(shù)據(jù)已經(jīng)與其他的數(shù)據(jù)做了相應(yīng)的運(yùn)算(比如加減乘除等)得到了運(yùn)算后的數(shù)據(jù),該運(yùn)算后的數(shù)據(jù)傳播至 該分支指令,此時(shí)可以稱之為間接污染。

需要說明的是,上述關(guān)鍵數(shù)據(jù)的信息可以用于指示上述關(guān)鍵數(shù)據(jù)在指定樣本中的特征信息,該特征信息可以是上述關(guān)鍵數(shù)據(jù)的長度和上述關(guān)鍵數(shù)據(jù)在指定樣本中的位置,但并不限于此??梢岳迷撽P(guān)鍵數(shù)據(jù)的信息在指定樣本中找到與該信息匹配的關(guān)鍵信息。

可選的,上述關(guān)鍵數(shù)據(jù)的信息的獲取過程可以有一個(gè)獨(dú)立的模塊來實(shí)現(xiàn),也可以有多個(gè)模塊共同來實(shí)現(xiàn),對(duì)于前者表現(xiàn)為:上述獲取模塊52還用于將指定樣本標(biāo)記為污染源;將該污染源作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;獲取污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)在指定樣本中的位置和長度,得到關(guān)鍵數(shù)據(jù)的信息。對(duì)于后者,可表現(xiàn)為:上述獲取模塊52可以包括標(biāo)記單元,用于將指定樣本標(biāo)記為污染源;執(zhí)行單元,用于將該污染源作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;獲取單元,用于獲取污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)在指定樣本中的位置和長度,得到關(guān)鍵數(shù)據(jù)的信息。對(duì)于具體的實(shí)施例中,采用一個(gè)模塊來完成還是采用多個(gè)模塊(單元)來完成上述獲得過程,可以根據(jù)具體情況進(jìn)行選擇,并不做限定。

在本申請(qǐng)的一個(gè)實(shí)施例中,上述獲取模塊52還用于在執(zhí)行被測(cè)試程序的過程中,當(dāng)執(zhí)行到所述分支指令時(shí),檢測(cè)分支指令是否被污染源污染;如果檢測(cè)到分支指令被污染源污染,記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度。此處也可以通過多個(gè)單元來完成檢測(cè),記錄的過程,比如:檢測(cè)單元,可以用于在執(zhí)行被測(cè)試程序的過程中,當(dāng)執(zhí)行到所述分支指令時(shí),檢測(cè)分支指令是否被污染源污染,在檢測(cè)到分支指令被污染源污染,通知記錄單元來記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度,但并不限于此。

需要說明的是,此處分支指令是否被污染源污染的表現(xiàn)形式,與關(guān)鍵數(shù)據(jù)是否污染被測(cè)試程序的表現(xiàn)形式類似,此處不再贅述。

需要說明的是,上述獲取模塊54可以繼續(xù)執(zhí)行,直到被測(cè)試程序執(zhí)行結(jié)束,具體可以表現(xiàn)為,上述獲取模塊54在記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度之后,還可以繼續(xù)執(zhí)行上述被測(cè)試程序,并在繼續(xù)執(zhí)行上述被測(cè)試程序的過程中執(zhí)行以下處理過程,直至被測(cè)試程序執(zhí)行結(jié)束:檢測(cè)被測(cè)試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數(shù)據(jù)在指定樣本中的位置和長度。

變異模塊54,與上述獲取模塊52連接,用于根據(jù)關(guān)鍵數(shù)據(jù)的信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本;

需要說明的是,上述變異模塊54可以通過該關(guān)鍵數(shù)據(jù)的信息在指定樣本中找到關(guān)鍵數(shù)據(jù),在對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,但并不限于此。

需要說明的是,此處的變異是指修改關(guān)鍵數(shù)據(jù)生成新的關(guān)鍵數(shù)據(jù),而上述變異模塊54在指定樣本中用生成的新的關(guān)鍵數(shù)據(jù)代替該變異前的關(guān)鍵數(shù)據(jù),進(jìn)而得到變異后的指定樣本,即只對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)進(jìn)行變異,進(jìn)而減少了變異的范圍,同時(shí)減少了無意義的樣本的生成。

確定模塊56,與上述變異模塊54連接,用于將變異后的指定樣本確定為測(cè)試樣本。

需要說明的是,上述測(cè)試樣本可以是能夠觸發(fā)被測(cè)試程序出現(xiàn)新的代碼執(zhí)行路徑的變異后的指定樣本,上述確定模塊56還可以用于以變異后的指定樣本作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;在執(zhí)行被測(cè)試程序的過程中,如果檢測(cè)到新的代碼執(zhí)行路徑,則將變異后的指定樣本確定為測(cè)試樣本;其中,該新的代碼執(zhí)行路徑為指定樣本作為被測(cè)試程序的輸入時(shí),與被測(cè)試程序執(zhí)行的代碼執(zhí)行路徑不同的執(zhí)行路徑。

需要說明的是,由于可以通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)進(jìn)行變異,變異后的指定樣本作為被測(cè)試程序的輸入,在被測(cè)試程序的執(zhí)行過程中如果發(fā)現(xiàn)新的代碼執(zhí)行路徑,則該變異后的指定樣本可以作為測(cè)試樣本,因而從該角度上出發(fā),指定樣本中的關(guān)鍵數(shù)據(jù)能夠影響被測(cè)試程序的代碼執(zhí)行路徑,也就能夠影響被測(cè)試程序的執(zhí)行流程,進(jìn)而該關(guān)鍵數(shù)據(jù)也可以描述為指定樣本中對(duì)被測(cè)試程序的執(zhí)行流程產(chǎn)生影響的數(shù)據(jù)。

通過上述裝置,上述變異模塊54根據(jù)獲取模塊52獲取的指定樣本中的關(guān)鍵數(shù)據(jù)的信息,對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本,確定模塊56將該變異后的指定樣本確定為測(cè)試樣本的方式,即上述裝置通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)的變異,生成測(cè)試樣本,實(shí)現(xiàn)了對(duì)指定樣本的精確變異,減少了無意義的樣本的生成,進(jìn)而提高了代碼覆蓋率,進(jìn)而解決了相關(guān)技術(shù)中生成的測(cè)試樣本存在代碼覆蓋率低的技術(shù)問題。

需要說明的是,上述各個(gè)模塊是可以通過軟件或者硬件來實(shí)現(xiàn)的,對(duì)于后者,可以通過以下方式實(shí)現(xiàn),當(dāng)并不限于此:上述各個(gè)模塊以任意組合的方式位于不同的處理器中,例如,上述各個(gè)模塊均位于同一處理器中,或者上述各個(gè)模塊分別位于不同的處理器中。

實(shí)施例3

本發(fā)明的實(shí)施例可以提供一種計(jì)算機(jī)終端,該計(jì)算機(jī)終端可以是計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端設(shè)備。該計(jì)算機(jī)終端可以是實(shí)施例1中的終端。可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端也可以替換為移動(dòng)終端等終端設(shè)備。

可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端可以位于計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)網(wǎng)絡(luò)設(shè)備中的至少一個(gè)網(wǎng)絡(luò)設(shè)備。

在本實(shí)施例中,上述計(jì)算機(jī)終端可以執(zhí)行測(cè)試樣本的生成方法中以下步驟的程序代碼:獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為所述指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);根據(jù)信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測(cè)試樣本。

可選地,圖6是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖6所示,該計(jì)算機(jī)終端a可以包括:一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器、存儲(chǔ)器、以及傳輸裝置。

其中,存儲(chǔ)器可用于存儲(chǔ)軟件程序以及模塊,如本發(fā)明實(shí)施例中的測(cè)試樣本的生成方法和裝置對(duì)應(yīng)的程序指令/模塊,處理器通過運(yùn)行存儲(chǔ)在存儲(chǔ)器內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的測(cè)試樣本的生成方法。存儲(chǔ)器可包括高速隨機(jī)存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器可進(jìn)一步包括相對(duì)于處理器遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過網(wǎng)絡(luò)連接至計(jì)算機(jī)終端a。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。

上述計(jì)算機(jī)終端中的處理器可以通過傳輸裝置調(diào)用存儲(chǔ)器存儲(chǔ)的信息及應(yīng)用程序,以執(zhí)行下述步驟:將指定樣本標(biāo)記為污染源;將污染源作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;獲取污染源中污染被測(cè)試程序的分支指令的數(shù)據(jù)在指定樣本中的位置和長度,得到關(guān)鍵數(shù)據(jù)的信息。

可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:在執(zhí)行被測(cè)試程序的過程中,當(dāng)執(zhí)行到分支指令時(shí),檢測(cè)分支指令是否被污染源污染;如果檢測(cè)到分支指令被污染源污染,記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度。

可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:在記錄污染源中污染分支指令的數(shù)據(jù)在指定樣本中的位置和長度之后,繼續(xù)執(zhí)行上述被測(cè)試程序,并在繼續(xù)執(zhí)行上述被測(cè)試程序的過程中執(zhí)行以下處理過程,直至被測(cè)試程序執(zhí)行結(jié)束:檢測(cè)被測(cè)試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數(shù)據(jù)在指定樣本中的位置和長度。

可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:以變異后的指定樣本作為被測(cè)試程序的輸入,執(zhí)行被測(cè)試程序;在執(zhí)行被測(cè)試程序的過程中,如果檢測(cè)到新的代碼執(zhí)行路徑,則將變異后的指定樣本確定為測(cè)試樣本;其中,新的代碼執(zhí)行路徑為指定樣本作為被測(cè)試程序的輸入時(shí),與被測(cè)試程序執(zhí)行的代碼執(zhí)行路徑不同的執(zhí)行路徑。

采用本發(fā)明實(shí)施例,采用根據(jù)獲取的指定樣本中的關(guān)鍵數(shù)據(jù)的信息,對(duì)該關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測(cè)試樣本的方式,即通過對(duì)指定樣本中的關(guān)鍵數(shù)據(jù)的變異,生成測(cè)試樣本,實(shí)現(xiàn)了對(duì)指定樣本的精確變異,減少了無意義的樣本的生成,進(jìn)而提高了代碼覆蓋率,進(jìn)而解決了相關(guān)技術(shù)中生成的測(cè)試樣本存在代碼覆蓋率低的技術(shù)問題。

本領(lǐng)域普通技術(shù)人員可以理解,圖6所示的結(jié)構(gòu)僅為示意,計(jì)算機(jī)終端也可以是智能手機(jī)(如android手機(jī)、ios手機(jī)等)、平板電腦、掌聲電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備(mobileinternetdevices,mid)、pad等終端設(shè)備。圖6其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端a還可包括比圖6中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖6所示不同的配置。

本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設(shè)備相關(guān)的硬件來完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤或光盤等。

實(shí)施例4

本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于保存上述實(shí)施例1所提供的測(cè)試樣本的生成方法所執(zhí)行的程序代碼。

可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以位于計(jì)算機(jī)網(wǎng)絡(luò)中計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端中,或者位于移動(dòng)終端群中的任意一個(gè)移動(dòng)終端中。

可選地,在本實(shí)施例中,存儲(chǔ)介質(zhì)被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取指定樣本中關(guān)鍵數(shù)據(jù)的信息;其中,該關(guān)鍵數(shù)據(jù)為所述指定樣本中,污染被測(cè)試程序的分支指令的數(shù)據(jù);根據(jù)信息對(duì)指定樣本中關(guān)鍵數(shù)據(jù)進(jìn)行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測(cè)試樣本。

此處需要說明的是,上述計(jì)算機(jī)終端群中的任意一個(gè)可以與網(wǎng)站服務(wù)器和掃描器建立通信關(guān)系,掃描器可以掃描計(jì)算機(jī)終端上php執(zhí)行的web應(yīng)用程序的值命令。

上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。

在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的客戶端,可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。

另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
南阳市| 孟连| 长沙县| 惠安县| 信宜市| 图木舒克市| 怀来县| 乐安县| 余江县| 甘洛县| 延庆县| 阿拉善左旗| 江都市| 彭水| 和田市| 兴海县| 巴林左旗| 鄂尔多斯市| 诸城市| 日喀则市| 达日县| 武夷山市| 泰来县| 石门县| 新化县| 临桂县| 怀化市| 鄂州市| 六盘水市| 巴青县| 吉隆县| 禹州市| 浠水县| 阳新县| 吴江市| 福贡县| 兴安县| 延津县| 平湖市| 娄底市| 南投市|