專利名稱::基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及通信和計(jì)算機(jī)領(lǐng)域,尤其涉及一種軟件安全分析領(lǐng)域。
背景技術(shù):
:目前,在軟件安全研究領(lǐng)域中,經(jīng)常會(huì)對(duì)軟件進(jìn)行安全分析,在安全分析過(guò)程中一個(gè)主要問(wèn)題是生成具有一定覆蓋度的測(cè)試數(shù)據(jù)。無(wú)論是學(xué)術(shù)界還是產(chǎn)業(yè)界,普遍的安全分析方法分為動(dòng)態(tài)分析方法和靜態(tài)分析方法兩種。動(dòng)態(tài)分析的方法通過(guò)運(yùn)行所要分析的目標(biāo)程序,通過(guò)人為設(shè)置不同的輸入?yún)?shù),使目標(biāo)程序運(yùn)行于不同的狀態(tài),從而觀察程序內(nèi)部情況或運(yùn)行中產(chǎn)生的錯(cuò)誤情況,以便發(fā)現(xiàn)安全缺陷。動(dòng)態(tài)分析中最常用的方法就是FuzzTesting(模糊測(cè)試,又稱之為隨機(jī)數(shù)黑盒暴力測(cè)試法)。動(dòng)態(tài)分析的方法自動(dòng)產(chǎn)生測(cè)試數(shù)據(jù),測(cè)試結(jié)果準(zhǔn)確,適用范圍廣,但是效率較低,對(duì)人工依賴較大,實(shí)施過(guò)程中的不確定因素較多。靜態(tài)分析的對(duì)象可以是源代碼,也可以是二進(jìn)制可執(zhí)行程序,一般對(duì)源代碼或二進(jìn)制可執(zhí)行程序進(jìn)行結(jié)構(gòu)上或語(yǔ)法上的解析后,將結(jié)構(gòu)化表示的內(nèi)容在特定規(guī)則的情況下進(jìn)行匹配識(shí)別。靜態(tài)分析常用于對(duì)源代碼的安全審查,也用于二進(jìn)制程序,但情況較少。目前比較常用的靜態(tài)分析技術(shù)是符號(hào)執(zhí)行分析技術(shù)。符號(hào)執(zhí)行分析是通過(guò)符號(hào)表達(dá)式來(lái)執(zhí)行程序的,也就是說(shuō)程序的執(zhí)行用符號(hào)來(lái)模擬使用符號(hào)值,而不是實(shí)際數(shù)據(jù),作為輸入;將程序變量的值表示為符號(hào)表達(dá)式;程序計(jì)算的輸出表達(dá)為輸入符號(hào)值的函數(shù)。利用符號(hào)執(zhí)行分析技術(shù)進(jìn)行靜態(tài)分析時(shí),首先將程序抽象化,用符號(hào)來(lái)表示;然后構(gòu)造所有可能的輸入,以每個(gè)可能輸入值作為輸入,開(kāi)始執(zhí)行,執(zhí)行的每一步的結(jié)果以輸入值、常量和其它變量的邏輯或數(shù)學(xué)表達(dá)式來(lái)表示,直到程序結(jié)束的返回語(yǔ)句或者預(yù)定義的分析跳出條件被滿足。一些漏洞挖掘工具常常采用符號(hào)執(zhí)行分析技術(shù),如EXE(ExecutiongeneratedExecutions)漏洞挖掘工具和KLEE(EXE的改進(jìn)版本)漏洞挖掘工具,并取得了良好的效果。符號(hào)執(zhí)行分析技術(shù)的優(yōu)點(diǎn)是分析是路徑敏感的;因?yàn)闆](méi)有對(duì)路徑、狀態(tài)做近似,結(jié)果精確;適合做狀態(tài)檢查、時(shí)序檢查;對(duì)并發(fā)類型的錯(cuò)誤十分有效;缺點(diǎn)有對(duì)系統(tǒng)的行為進(jìn)行近似,可能導(dǎo)致這類結(jié)果不精確;對(duì)所有可能的狀態(tài)進(jìn)行窮舉搜索,開(kāi)銷大;在邊界處對(duì)路徑、時(shí)序?qū)傩越评щy,故復(fù)合困難。綜合上述,目前主流的靜態(tài)分析技術(shù)和動(dòng)態(tài)分析技術(shù)基本都存在一些問(wèn)題(l)動(dòng)態(tài)測(cè)試自動(dòng)生成測(cè)試數(shù)據(jù),但測(cè)試的不確定因素較多,具有一定的盲目性,(2)靜態(tài)分析效率較高,分析是路徑敏感的,但在理論上存在較高的漏報(bào)率和誤報(bào)率,難于準(zhǔn)確定位漏洞;靜態(tài)分析大多需要在獲得源代碼的基礎(chǔ)上進(jìn)行分析,針對(duì)二進(jìn)制程序的符號(hào)執(zhí)行技術(shù)復(fù)雜;符號(hào)執(zhí)行可以自動(dòng)生成測(cè)試數(shù)據(jù)進(jìn)行路徑遍歷,但執(zhí)行的路徑?jīng)]有針對(duì)性,且存在路徑爆炸難題,自動(dòng)生成測(cè)試數(shù)據(jù)進(jìn)行完備的路徑敏感分析不太現(xiàn)實(shí)??梢?jiàn),二進(jìn)制程序路徑敏感分析還迫切需要新的突破技術(shù)。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器和方法,通過(guò)本發(fā)明,能夠提高測(cè)試數(shù)據(jù)的準(zhǔn)確度。本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的本發(fā)明提供一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其包括獲取所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,并獲取引導(dǎo)路徑;對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息;基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。其中,更進(jìn)一步優(yōu)選的,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,還包括對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的路徑約束條件信息;對(duì)不能與所述弓I導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息,進(jìn)行修改;對(duì)修改后路徑約束條件信息求解,將求得的解,作為新的測(cè)試數(shù)據(jù)輸入,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序。其中,更進(jìn)一步優(yōu)選的,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,還包括獲得目標(biāo)代碼段;以及,通過(guò)IDA插件獲得二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到讀取所述初始測(cè)試數(shù)據(jù)函數(shù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;從所確定出的路徑中確定出弓|導(dǎo)路徑。其中,更進(jìn)一步優(yōu)選的,所述從所確定出的路徑中確定出引導(dǎo)路徑的過(guò)程,包括判斷所確定出的路徑中是否存在未處理的路徑;若有,則從中選擇一個(gè)作為引導(dǎo)路徑;否則,則轉(zhuǎn)入獲得目標(biāo)代碼段的過(guò)程。其中,更進(jìn)一步優(yōu)選的,所述獲得目標(biāo)代碼段的過(guò)程,包括通過(guò)IDA插件獲得危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段;根據(jù)所述危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段,設(shè)定目標(biāo)代碼段;或者,獲取用戶輸入的目標(biāo)代碼段。本發(fā)明還提供一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其包括動(dòng)態(tài)符號(hào)執(zhí)行模塊,用于所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息和引導(dǎo)路徑;對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息;路徑引導(dǎo)模塊,用于基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;測(cè)試數(shù)據(jù)生成模塊,用于生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。其中,更進(jìn)一步優(yōu)選的,所述動(dòng)態(tài)符號(hào)執(zhí)行模塊,還用于對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的路徑約束條件信息;所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括路徑修訂模塊,用于對(duì)不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息,進(jìn)行修改;對(duì)修改后的路徑約束條件信息求解,將求得的解作為新的測(cè)試數(shù)據(jù)輸出給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。其中,更進(jìn)一步優(yōu)選的,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括用戶接口模塊,用于獲得目標(biāo)代碼段;路徑確定模塊,用于獲得二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到讀取所述初始測(cè)試數(shù)據(jù)函數(shù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;從所確定出的路徑中確定出引導(dǎo)路徑。其中,更進(jìn)一步優(yōu)選的,所述路徑確定模塊,包括路徑回溯單元,用于根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到所述初始測(cè)試數(shù)據(jù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;引導(dǎo)路徑確定單元,用于判斷所確定出的路徑中是否存在未處理的路徑;若有,則從中選擇一個(gè)作為引導(dǎo)路徑;否則,觸發(fā)所述用戶接口模塊。其中,更進(jìn)一步優(yōu)選的,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括調(diào)試器,負(fù)責(zé)加載二進(jìn)制程序使其處于調(diào)試運(yùn)行狀態(tài),并解析初始測(cè)試數(shù)據(jù),得到與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,并將與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息提供給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。由上述本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明由于結(jié)合了靜態(tài)分析與動(dòng)態(tài)分析的優(yōu)點(diǎn),采用了動(dòng)態(tài)執(zhí)行的方法獲得實(shí)際執(zhí)行環(huán)境中的數(shù)據(jù),相對(duì)于靜態(tài)分析技術(shù),能夠提高符號(hào)執(zhí)行的有效性和準(zhǔn)確性,從而能夠提高生成測(cè)試數(shù)據(jù)的準(zhǔn)確度。另外,本發(fā)明關(guān)注于特定的目標(biāo)代碼段,能夠生成能夠有針對(duì)性的用于對(duì)關(guān)鍵代碼段進(jìn)行路徑敏感分析的測(cè)試數(shù)據(jù),從而能夠有效緩解符號(hào)執(zhí)行中遇到的路徑爆炸問(wèn)題。圖i是本發(fā)明第一實(shí)施例中基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器的結(jié)構(gòu)原理圖。圖2是本發(fā)明第二實(shí)施例中基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法的流程圖。圖3是本發(fā)明第二實(shí)施例中確定引導(dǎo)路徑過(guò)程的流程圖。具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。本發(fā)明第一實(shí)施例提供一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,該基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器是從基于二進(jìn)制程序的初始測(cè)試數(shù)據(jù)入手,結(jié)合實(shí)際執(zhí)行和符號(hào)執(zhí)行解決軟件安全檢測(cè)面臨的問(wèn)題。為緩解路徑爆炸問(wèn)題,該基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器關(guān)注存在安全危險(xiǎn)的代碼部分,根據(jù)輸入的二進(jìn)制程序,利用動(dòng)態(tài)符號(hào)執(zhí)行技術(shù),能夠在不需要源代碼的條件下,自動(dòng)生成能夠使此基于二進(jìn)制程序的初始測(cè)試數(shù)據(jù)的輸入點(diǎn)沿著所有可能的不同路徑實(shí)際執(zhí)行到達(dá)目標(biāo)代碼段的測(cè)試數(shù)據(jù)集。其結(jié)構(gòu)原理圖如圖l所示,包括如下模塊調(diào)試器10、用戶接口模塊20、路徑確定模塊30、動(dòng)態(tài)符號(hào)執(zhí)行模塊40、路徑引導(dǎo)模塊50,路徑修訂模塊60、測(cè)試數(shù)據(jù)生成模塊70。調(diào)試器10,用于負(fù)責(zé)加載二進(jìn)制程序使其處于調(diào)試運(yùn)行狀態(tài),并解析初始測(cè)試數(shù)據(jù),得到與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,并將與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息提供給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。該調(diào)試器10的具體情況如下調(diào)試器lO,負(fù)責(zé)加載二進(jìn)制程序并使其處于調(diào)試運(yùn)行狀態(tài),解析PE(PortableExecutable,可移植的執(zhí)行體)文件(PE文件是win32平臺(tái)下可執(zhí)行文件遵守的數(shù)據(jù)格式)結(jié)構(gòu),獲得與初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制代碼和相關(guān)信息。該調(diào)試器10,還可以提供包括斷點(diǎn)、單步執(zhí)行、遠(yuǎn)程內(nèi)存和寄存器訪問(wèn)等功能,為動(dòng)態(tài)符號(hào)執(zhí)行提供運(yùn)行環(huán)境,并在運(yùn)行過(guò)程中為符號(hào)執(zhí)行獲取寄存器和內(nèi)存中的數(shù)據(jù)。用戶接口模塊20,用于獲得目標(biāo)代碼段。該用戶接口模塊20的具體情況如下該用戶接口模塊20主要負(fù)責(zé)與用戶進(jìn)行交互,一方面用于獲取用戶自定義需測(cè)試分析的目標(biāo)代碼段,或從系統(tǒng)自動(dòng)提供的具有潛在安全危險(xiǎn)的危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段中選擇需測(cè)試分析的目標(biāo)代碼段;另一方面,該用戶接口模塊20,還負(fù)責(zé)記錄測(cè)試數(shù)據(jù)生成模塊生成的與到達(dá)目標(biāo)代碼段的各個(gè)實(shí)際執(zhí)行路徑相對(duì)應(yīng)的測(cè)試數(shù)據(jù)。路徑確定模塊30,用于獲得所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序(即PE文件)的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析技術(shù)獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息,根據(jù)獲得的二進(jìn)制程序的數(shù)據(jù)流、控制流信息和所述用戶接口模塊20輸出給的需測(cè)試分析的目標(biāo)代碼段,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到所述初始測(cè)試數(shù)據(jù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;將所確定出的路徑作為引導(dǎo)路徑。所述路徑確定模塊30,具體包括路徑回溯單元301和引導(dǎo)路徑確定單元302。路徑回溯單元301,用于獲得所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;并根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流、控制流信息和所述用戶接口模塊20所獲得的需測(cè)試分析的目標(biāo)代碼段,從所述需測(cè)試分析的目標(biāo)代碼段所在的基本塊開(kāi)始追溯到讀取所述初始測(cè)試數(shù)據(jù)函數(shù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑。具體情況如下路徑回溯單元301,通過(guò)IDA(InteractiveDisassembler,交互式反匯編程序)插件,獲得讀取所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序的匯編代碼的基本塊信息和函數(shù)調(diào)用等信息,并通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息,在此基礎(chǔ)上從目標(biāo)代碼段所在基本塊開(kāi)始,通過(guò)一步步向前追溯前驅(qū)塊,最終回溯到所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序輸入API(ApplicationProgrammingInterface,應(yīng)用編程接口)函數(shù)所在基本i央,獲得從所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序的輸入點(diǎn)到達(dá)所述目標(biāo)代碼段的一條條不同路徑,如果路徑中的有循環(huán),則將循環(huán)體按照循環(huán)次數(shù)的不同將路徑循環(huán)擴(kuò)展為子路徑集;引導(dǎo)路徑確定單元302,用于判斷所述路徑回溯單元301所確定出的路徑中是否存在未處理的路徑;若有,則從中選擇一個(gè)作為引導(dǎo)路徑;否則,觸發(fā)所述用戶接口模塊20獲取新的目標(biāo)代碼段。具體情況如下引導(dǎo)路徑確定單元302首先判斷路徑回溯單元301所確定出的路徑中是否存在未處理的路徑;若有,則從中選擇一個(gè)作為引導(dǎo)路徑用于引導(dǎo)程序的執(zhí)行,標(biāo)記已作為引導(dǎo)路徑的路徑,并在其余的路徑中選擇新的引導(dǎo)路徑;若發(fā)現(xiàn)路徑回溯單元301所確定出的路徑都被處理過(guò),則觸發(fā)所述用戶接口模塊20獲取新的目標(biāo)代碼段。動(dòng)態(tài)符號(hào)執(zhí)行模塊40,用于從所述路徑確定模塊30中獲取引導(dǎo)路徑,從所述調(diào)試器10中獲取所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息;并對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息,以及,相應(yīng)的路徑約束條件信息;具體情況如下動(dòng)態(tài)符號(hào)執(zhí)行模塊40,將靜態(tài)符號(hào)執(zhí)行與動(dòng)態(tài)實(shí)際執(zhí)行相結(jié)合,使用符號(hào)值,而不是實(shí)際數(shù)據(jù),作為輸入;將程序變量的值表示為符號(hào)表達(dá)式;程序計(jì)算的輸出表達(dá)為輸入符號(hào)值的函數(shù)。該模塊的輸出是符號(hào)變量控制的路徑約束條件集合和條件跳轉(zhuǎn)地址信息。這里動(dòng)態(tài)符號(hào)執(zhí)行模塊40負(fù)責(zé)將所述引導(dǎo)路徑、所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息和通過(guò)反匯編獲得的指令信息結(jié)構(gòu)體作為輸入,輸出是實(shí)際執(zhí)行路徑的路徑約束條件集合和條件跳轉(zhuǎn)地址信息,這些輸出都是符號(hào)變量的表達(dá)式。將輸出的約束條件集合和條件跳轉(zhuǎn)地址信息提供給路徑引導(dǎo)模塊50;路徑引導(dǎo)模塊50,用于基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;獲得與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑,或者,不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑。路徑修訂模塊60,用于對(duì)不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息,進(jìn)行修改;對(duì)修改后路徑約束條件信息求解,將求得的解作為新的測(cè)試數(shù)據(jù)輸出給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。通過(guò)動(dòng)態(tài)符號(hào)執(zhí)行模塊得到與引導(dǎo)路徑有關(guān)的路徑約束條件信息集合,得到的路徑約束條件信息符合STP(SimpleTheoremProver,簡(jiǎn)單定理證明器)約束求解器語(yǔ)法規(guī)范的表達(dá)式輸出,這樣可以通過(guò)STP約束求解器,對(duì)修正后的路徑約束條件信息集合求解,若有解,則將該解對(duì)應(yīng)的路徑約束信息集合,作為新的測(cè)試數(shù)據(jù)輸入,這樣不斷的調(diào)整測(cè)試數(shù)據(jù)輸入,以便使程序沿著引導(dǎo)路徑最終實(shí)際執(zhí)行到目標(biāo)代碼段;對(duì)路徑約束條件信息求解無(wú)解的,則說(shuō)明當(dāng)前被引導(dǎo)的實(shí)際執(zhí)行路徑為實(shí)際不可達(dá)的路徑,將其標(biāo)識(shí)為不可行路徑,結(jié)束該當(dāng)前引導(dǎo)路徑的引導(dǎo),并排除該不可行的被引導(dǎo)的路徑(即實(shí)際執(zhí)行的路徑)。路徑修訂模塊60在對(duì)路徑約束條件信息進(jìn)行修改時(shí),一般遵循如下規(guī)則首先識(shí)別實(shí)際執(zhí)行路徑中的cal1語(yǔ)句;如果與引導(dǎo)路徑的條件跳轉(zhuǎn)地址信息不符的跳轉(zhuǎn)節(jié)點(diǎn)的前一個(gè)路徑節(jié)點(diǎn)為call語(yǔ)句,則從最后一個(gè)路徑約束條件信息起,向前依次求反若之前沒(méi)有對(duì)運(yùn)行到的最后一個(gè)跳轉(zhuǎn)節(jié)點(diǎn)對(duì)應(yīng)的跳轉(zhuǎn)條件求反過(guò),則對(duì)它求反;如果已求反,但再次運(yùn)行實(shí)際執(zhí)行路徑時(shí),條件跳轉(zhuǎn)地址信息與引導(dǎo)路徑的仍不符,則繼續(xù)向前對(duì)它的前一個(gè)跳轉(zhuǎn)節(jié)點(diǎn)對(duì)應(yīng)的跳轉(zhuǎn)求反;如果某一個(gè)跳轉(zhuǎn)節(jié)點(diǎn)對(duì)應(yīng)的跳轉(zhuǎn)條件被取反后,則其后跳轉(zhuǎn)條件作廢。如果與引導(dǎo)路徑的條件跳轉(zhuǎn)地址信息不符的跳轉(zhuǎn)節(jié)點(diǎn)的前一個(gè)路徑節(jié)點(diǎn)不是call語(yǔ)句,則僅對(duì)最后一個(gè)跳轉(zhuǎn)條件求反。測(cè)試數(shù)據(jù)生成模塊70,用于生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。測(cè)試數(shù)據(jù)生成模塊70為可行的被引導(dǎo)路徑自動(dòng)生成相應(yīng)的測(cè)試數(shù)據(jù),即生成沿被引導(dǎo)的路徑實(shí)際執(zhí)行到目標(biāo)代碼段的測(cè)試數(shù)據(jù),這樣可以使程序沿著可行被引導(dǎo)的路徑執(zhí)行到達(dá)目標(biāo)代碼段。上述實(shí)施例中還可以包括反匯編模塊,負(fù)責(zé)將調(diào)試器10獲得的二進(jìn)制代碼反匯編成匯編指令,再將該匯編指令按其格式分解為操作類型、操作數(shù)和操作數(shù)位數(shù),填充到指令信息結(jié)構(gòu)體中,供動(dòng)態(tài)符號(hào)執(zhí)行模塊40使用;上述二進(jìn)制代碼可以是來(lái)自于Windows平臺(tái)下所有PE格式的EXE文件和相關(guān)DLL文件代碼,即可用于Windows平臺(tái)下任意的可執(zhí)行程序。為了達(dá)到上述目的,本發(fā)明第二實(shí)施例還提供了一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其流程圖如圖2所示,包括下列操作步驟步驟201,獲取初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息;然后轉(zhuǎn)入步驟203。首先輸入需要測(cè)試的二進(jìn)制程序并通過(guò)利用在IDAPro逆向工具上開(kāi)發(fā)的插件獲得的數(shù)據(jù)文件,并提供初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息;隨后通過(guò)反匯編處理,按反匯編程序的格式,將所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息的機(jī)器碼,解析成操作類型、操作數(shù)和操作數(shù)位數(shù),并填入到指令信息結(jié)構(gòu)體,然后轉(zhuǎn)入步驟203。步驟202,獲得目標(biāo)代碼段。具體獲得目標(biāo)代碼段的方法有如下2種其一是通過(guò)IDA插件獲得具有潛在安全危險(xiǎn)的危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段;根據(jù)所述危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段,設(shè)定目標(biāo)代碼段;另外一種是獲取用戶輸入的目標(biāo)代碼段。步驟203,回溯得到從讀取所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序的輸入點(diǎn)到達(dá)所述目標(biāo)代碼段的路徑。通過(guò)IDA插件獲得二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從目標(biāo)代碼段所在基本塊開(kāi)始通過(guò)一步步向前追溯前驅(qū)塊,最終回溯到所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序輸入API(A卯licationProgrammingInterface,應(yīng)用編程接口)函數(shù)所在基本塊,獲得從所述初始測(cè)試數(shù)據(jù)的二進(jìn)制程序的輸入點(diǎn)到達(dá)所述目標(biāo)代碼段的一條條不同路徑,如果路徑中的有循環(huán),則將循環(huán)體按照循環(huán)次數(shù)的不同將路徑循環(huán)擴(kuò)展為子路徑集。此處的到達(dá)用戶所指定的目標(biāo)代碼段的所有路徑,可以用路徑中的匯編跳轉(zhuǎn)指令的地址的順序排列表示。此處的匯編跳轉(zhuǎn)指令可以是如下中的任意一種call、ret、je、jz、jnz、jne、jmp、jle、jng、jl、jnge、jge、jnl、jg、jnle、jo、jno、jb、jc、jnb、jnc、jbe、jna、ja、jnbe、js、jns、jpe、jp、jpo、j即、jecxz。步驟204,確定引導(dǎo)路徑根據(jù)深度優(yōu)先策略,在回溯路徑中獲得的一條未經(jīng)過(guò)路徑引導(dǎo)處理的路徑作為引導(dǎo)路徑,并標(biāo)記該條引導(dǎo)路徑為已經(jīng)用作引導(dǎo)的引導(dǎo)路徑,然后執(zhí)行步驟205,對(duì)含有循環(huán)的路徑,按不同的循環(huán)次數(shù)將路徑擴(kuò)展分為不同的子引導(dǎo)路徑,并依次進(jìn)行處理;當(dāng)所有的路徑都經(jīng)過(guò)引導(dǎo)處理后,轉(zhuǎn)到步驟202。該步驟204中確定引導(dǎo)路徑的具體流程如圖3所示,包括如下步驟步驟301,采用深度優(yōu)先遍歷從回溯路徑中獲得一條路徑;步驟302,判斷該引導(dǎo)路徑中是否存在循環(huán),若存在循環(huán),則執(zhí)行步驟303;否則,執(zhí)行步驟306;步驟303,循環(huán)擴(kuò)展路徑。步驟304,判斷循環(huán)擴(kuò)展子路徑集是否遍歷,若否,則執(zhí)行步驟305;否則,執(zhí)行步驟307。步驟305,選擇一條子路徑作為一條引導(dǎo)路徑,然后轉(zhuǎn)入步驟304。識(shí)別路徑中的循環(huán)時(shí),對(duì)含有循環(huán)的路徑進(jìn)行不同次數(shù)的循環(huán)擴(kuò)展獲得循環(huán)擴(kuò)展子路徑集,并將不同次數(shù)循環(huán)擴(kuò)展之后得到的循環(huán)擴(kuò)展路徑集作為子引導(dǎo)路徑集。步驟306,選擇該路徑作為引導(dǎo)路徑。步驟307,標(biāo)記當(dāng)前引導(dǎo)路徑已經(jīng)被處理,然后轉(zhuǎn)入步驟301。標(biāo)記已經(jīng)經(jīng)過(guò)引導(dǎo)處理過(guò)的引導(dǎo)路徑,然后轉(zhuǎn)入步驟301,即繼續(xù)深度優(yōu)先遍歷獲得一條未執(zhí)行過(guò)的弓I導(dǎo)路徑來(lái)弓I導(dǎo)程序運(yùn)行。步驟205,對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息,和相應(yīng)的路徑約束條件信息。步驟206,基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)實(shí)際運(yùn)行路徑與弓I導(dǎo)路徑進(jìn)行匹配;若實(shí)際運(yùn)行路徑與所述引導(dǎo)路徑相匹配,則轉(zhuǎn)入步驟211;否則,執(zhí)行步驟207;步驟207,根據(jù)所述路徑約束條件信息,修改不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息。步驟208,對(duì)修改后的路徑約束條件求解。步驟209,判斷是否有解,若有解,則執(zhí)行步驟210,即將求得的解作為PE文件的新的測(cè)試數(shù)據(jù)輸入,重新加載。然后轉(zhuǎn)入步驟205,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序;若無(wú)解,轉(zhuǎn)入步驟211。在步驟206至步驟210的程序運(yùn)行過(guò)程中,根據(jù)動(dòng)態(tài)符號(hào)執(zhí)行程序的運(yùn)行結(jié)果,比較程序?qū)嶋H運(yùn)行的路徑與引導(dǎo)路徑的條件跳轉(zhuǎn)地址記錄是否符合,這里,可以通過(guò)比較路徑所經(jīng)過(guò)的匯編跳轉(zhuǎn)指令的地址順序來(lái)進(jìn)行比較。如果程序?qū)嶋H路徑的條件跳轉(zhuǎn)地址記錄與引導(dǎo)路徑的條件跳轉(zhuǎn)地址記錄不符,則結(jié)束該過(guò)程,獲得由步驟206得到的與輸入有關(guān)的路徑約束條件,對(duì)最后跳轉(zhuǎn)方向不符的路徑約束條件進(jìn)行求反修訂(具體執(zhí)行過(guò)程與第一實(shí)施例中的相關(guān)描述類似,這里不再詳細(xì)描述),獲得沿引導(dǎo)路徑進(jìn)一步運(yùn)行的路徑約束條件,并通過(guò)STP約束求解器,對(duì)修訂后的路徑約束條件求解,將求得的解對(duì)應(yīng)的路徑約束信息作為新的測(cè)試數(shù)據(jù),并重新加載程序,返回步驟205。如果修訂后的路徑約束條件無(wú)解,則標(biāo)識(shí)當(dāng)前被引導(dǎo)的實(shí)際執(zhí)行路徑為不可行路徑,返回步驟202進(jìn)行下一條路徑的引導(dǎo)。步驟211,結(jié)束當(dāng)前被引導(dǎo)的路徑。步驟212,生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。然后轉(zhuǎn)到步驟202,根據(jù)新的目標(biāo)代碼段進(jìn)行路徑弓I導(dǎo)。上述實(shí)施例中提及到的具有潛在安全危險(xiǎn)的危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段中,危險(xiǎn)函數(shù)有g(shù)ets、—getws、strcpy、wcscpy、—mbscpy、lstrcpyA、lstrcpyW、strcat、wcscat、_mbscat、lstrcatA、lstrcatW、strncpy、wcsncpy、_mbscbcpy、lstrcpynA、lstrcpynW、strncat、wcsncat、—mbsnbcat、memcpy、memmove、CopyMemory、MoveMemory、printf、fprintf、sprintf、wprintf、fwprintf、swprintf、vprintf、vfprintfvsprintf、vwprintf、vfwprintf、vswprintf、scanf、fscanf、sscanf、wscanf、fwscanf、swscanf、wsprintfA、wsprintfW;危險(xiǎn)操作有r印movsd、r印movsb。由上述實(shí)施例可以看出,本發(fā)明相對(duì)于目前其他相關(guān)技術(shù),主要存在如下技術(shù)創(chuàng)新點(diǎn)1、對(duì)二進(jìn)制代碼的分析,采用符號(hào)執(zhí)行技術(shù)和動(dòng)態(tài)實(shí)際執(zhí)行相結(jié)合,保證了符號(hào)執(zhí)行在二進(jìn)制代碼分析中的可行性和精確性。2、僅分析與輸入測(cè)試數(shù)據(jù)有關(guān)的路徑約束條件,簡(jiǎn)化了靜態(tài)分析的復(fù)雜度。3、關(guān)注于特定的目標(biāo)代碼段,有選擇、有重點(diǎn)的進(jìn)行測(cè)試。4、關(guān)注于特定的目標(biāo)代碼段,獲取所有到達(dá)路徑,引導(dǎo)路徑是完備的,最終得到的測(cè)試數(shù)據(jù)集對(duì)應(yīng)到達(dá)目標(biāo)代碼段的全路徑。5、采用路徑引導(dǎo)結(jié)合實(shí)際執(zhí)行的方法規(guī)約路徑約束條件,通過(guò)約束求解器求解獲得測(cè)試數(shù)據(jù)。6、為特定的具體路徑尋獲對(duì)應(yīng)的輸入數(shù)據(jù),產(chǎn)生的每個(gè)測(cè)試數(shù)據(jù)與每條不同的具體引導(dǎo)路徑是一一對(duì)應(yīng)的。由此可見(jiàn),本發(fā)明由于結(jié)合了靜態(tài)分析與動(dòng)態(tài)分析的優(yōu)點(diǎn),采用了動(dòng)態(tài)執(zhí)行的方法獲得實(shí)際執(zhí)行環(huán)境中的數(shù)據(jù),相對(duì)于靜態(tài)分析技術(shù),能夠提高符號(hào)執(zhí)行的有效性和準(zhǔn)確性,從而能夠提高生成測(cè)試數(shù)據(jù)的準(zhǔn)確度。另外,本發(fā)明關(guān)注于特定的目標(biāo)代碼段,能夠生成能夠有針對(duì)性的用于對(duì)關(guān)鍵代碼段進(jìn)行路徑敏感分析的測(cè)試數(shù)據(jù),從而能夠有效緩解符號(hào)執(zhí)行中遇到的路徑爆炸問(wèn)題。另外,采用路徑引導(dǎo)結(jié)合程序?qū)嶋H執(zhí)行的方法,生成方式簡(jiǎn)約,生成的測(cè)試數(shù)據(jù)更加的準(zhǔn)確。另外,相對(duì)于靜態(tài)符號(hào)執(zhí)行技術(shù),采用路徑引導(dǎo)的方式,可以方便的處理二進(jìn)制程序中的循環(huán),使得符號(hào)執(zhí)行的結(jié)果也更加準(zhǔn)確有效。另外,本發(fā)明可以對(duì)任意的目標(biāo)代碼段的檢測(cè)進(jìn)行測(cè)試數(shù)據(jù)的生成,從而使有選擇、有重點(diǎn)的進(jìn)行軟件測(cè)試成為可能。另外,本發(fā)明為特定的具體路徑生成對(duì)應(yīng)的輸入數(shù)據(jù),具有普遍適用性和可擴(kuò)展性,結(jié)合符號(hào)執(zhí)行還可以用于污點(diǎn)傳播分析、漏洞分析,也適用于進(jìn)行路徑遍歷。另外,具有更普遍的適用性,本二進(jìn)制程序測(cè)試數(shù)據(jù)生成器只需要分析可執(zhí)行程序本身而不需要提供源代碼。另外,本測(cè)試數(shù)據(jù)生成的方法針對(duì)windows平臺(tái),但采用的測(cè)試數(shù)據(jù)生成的方法與技術(shù)具有通用性,因此可以方便的移植到Li皿x平臺(tái)。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域:
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。權(quán)利要求一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其特征在于,包括獲取初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,并獲取引導(dǎo)路徑;對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息;基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其特征在于,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,還包括對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的路徑約束條件信息;對(duì)不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息,進(jìn)行修改;對(duì)修改后路徑約束條件信息求解,將求得的解,作為新的測(cè)試數(shù)據(jù)輸入,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序。3.根據(jù)權(quán)利要求1或2所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其特征在于,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,還包括獲得目標(biāo)代碼段;以及,通過(guò)IDA插件獲得二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到讀取所述初始測(cè)試數(shù)據(jù)函數(shù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;從所確定出的路徑中確定出引導(dǎo)路徑。4.根據(jù)權(quán)利要求3所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其特征在于,所述從所確定出的路徑中確定出引導(dǎo)路徑的過(guò)程,包括判斷所確定出的路徑中是否存在未處理的路徑;若有,則從中選擇一個(gè)作為引導(dǎo)路徑;否則,則轉(zhuǎn)入獲得目標(biāo)代碼段的過(guò)程。5.根據(jù)權(quán)利要求3所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成方法,其特征在于,所述獲得目標(biāo)代碼段的過(guò)程,包括通過(guò)IDA插件獲得危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段;根據(jù)所述危險(xiǎn)函數(shù)代碼段或危險(xiǎn)操作代碼段,設(shè)定目標(biāo)代碼段;或者,獲取用戶輸入的目標(biāo)代碼段。6.—種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其特征在于,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器包括動(dòng)態(tài)符號(hào)執(zhí)行模塊,用于基于所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息和引導(dǎo)路徑;對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息;路徑引導(dǎo)模塊,用于基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;測(cè)試數(shù)據(jù)生成模塊,用于生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。7.根據(jù)權(quán)利要求6所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其特征在于,所述動(dòng)態(tài)符號(hào)執(zhí)行模塊,還用于對(duì)所述引導(dǎo)路徑和所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的路徑約束條件信息;所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括路徑修訂模塊,用于對(duì)不能與所述引導(dǎo)路徑匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的路徑約束條件信息,進(jìn)行修改;對(duì)修改后的路徑約束條件信息求解,將求得的解作為新的測(cè)試數(shù)據(jù)輸出給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。8.根據(jù)權(quán)利要求6或7所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其特征在于,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括用戶接口模塊,用于獲得目標(biāo)代碼段;路徑確定模塊,用于獲得二進(jìn)制程序的基本塊信息和函數(shù)調(diào)用信息,通過(guò)靜態(tài)分析獲得二進(jìn)制程序的數(shù)據(jù)流和控制流信息;根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到讀取所述初始測(cè)試數(shù)據(jù)函數(shù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;從所確定出的路徑中確定出引導(dǎo)路徑。9.根據(jù)權(quán)利要求8所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其特征在于,所述路徑確定模塊,包括路徑回溯單元,用于根據(jù)所獲得的二進(jìn)制程序的數(shù)據(jù)流和控制流信息,從所述目標(biāo)代碼段所在的基本塊開(kāi)始追溯到所述初始測(cè)試數(shù)據(jù)所在的基本塊,確定出從所述初始測(cè)試數(shù)據(jù)的輸入點(diǎn)到所述目標(biāo)代碼段的路徑;引導(dǎo)路徑確定單元,用于判斷所確定出的路徑中是否存在來(lái)處理的路徑;若有,則從中選擇一個(gè)作為弓I導(dǎo)路徑;否則,觸發(fā)所述用戶接口模塊。10.根據(jù)權(quán)利要求9所述的基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,其特征在于,所述基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器,還包括調(diào)試器,負(fù)責(zé)加載二進(jìn)制程序使其處于調(diào)試運(yùn)行狀態(tài),并解析初始測(cè)試數(shù)據(jù),得到與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,并將與所述初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息提供給所述動(dòng)態(tài)符號(hào)執(zhí)行模塊。全文摘要一種基于二進(jìn)制程序的測(cè)試數(shù)據(jù)生成器和方法,其主要技術(shù)是對(duì)所述引導(dǎo)路徑和初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制程序的狀態(tài)信息,運(yùn)行動(dòng)態(tài)符號(hào)執(zhí)行程序,根據(jù)運(yùn)行結(jié)果獲得相應(yīng)的條件跳轉(zhuǎn)地址信息;基于所獲得的條件跳轉(zhuǎn)地址信息,將初始測(cè)試數(shù)據(jù)對(duì)應(yīng)的實(shí)際運(yùn)行路徑與引導(dǎo)路徑進(jìn)行匹配;生成與所述引導(dǎo)路徑相匹配的實(shí)際運(yùn)行路徑對(duì)應(yīng)的測(cè)試數(shù)據(jù)。本發(fā)明結(jié)合靜態(tài)分析與動(dòng)態(tài)分析的優(yōu)點(diǎn),能提高符號(hào)執(zhí)行的有效性和準(zhǔn)確性,提高生成測(cè)試數(shù)據(jù)的準(zhǔn)確度;還能生成用于對(duì)關(guān)鍵代碼段進(jìn)行路徑敏感分析的測(cè)試數(shù)據(jù),從而能有效緩解符號(hào)執(zhí)行中遇到的路徑爆炸問(wèn)題。文檔編號(hào)G06F11/36GK101714119SQ20091025042公開(kāi)日2010年5月26日申請(qǐng)日期2009年12月9日優(yōu)先權(quán)日2009年12月9日發(fā)明者崔寶江,洪海,王禹申請(qǐng)人:北京郵電大學(xué)