亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法

文檔序號(hào):6564596閱讀:311來源:國知局
專利名稱:一種復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法
技術(shù)領(lǐng)域
本發(fā)明屬于逆向工程和程序分析領(lǐng)域,具體涉及一種識(shí)別復(fù)合條件分支結(jié)構(gòu)的方法,可用于反編譯、軟件測試等設(shè)備中,能夠有效地將程序控制流圖結(jié)構(gòu)化。
背景技術(shù)
反編譯是從可執(zhí)行文件(表現(xiàn)為計(jì)算機(jī)可執(zhí)行的二進(jìn)制編碼)獲得與源程序等效的高級代碼的技術(shù),是逆向工程領(lǐng)域的核心技術(shù)之一,在不同的應(yīng)用領(lǐng)域發(fā)揮著重要的作用。
最初,反編譯技術(shù)主要應(yīng)用于輔助程序移植,如將程序從第二代計(jì)算機(jī)向第三代計(jì)算機(jī)遷移;到了70年代和80年代,反編譯技術(shù)開始被用于再工程(Re-engineering),包括對遺失源碼或第三方的二進(jìn)制程序進(jìn)行理解、文檔化、重構(gòu)和修改;從90年代中后期開始,信息安全領(lǐng)域?qū)Ψ淳幾g技術(shù)有了巨大的應(yīng)用需求,比如挖掘軟件安全漏洞、分析惡意軟件等工作,都對反編譯技術(shù)有著很高的依賴。
控制流分析是反編譯中的重要研究領(lǐng)域,復(fù)合條件分支識(shí)別、嵌套循環(huán)識(shí)別和多路分支(switch)識(shí)別是其中最重要的三個(gè)控制結(jié)構(gòu)識(shí)別問題,也是反編譯自動(dòng)化的核心技術(shù)之一。如果不能準(zhǔn)確識(shí)別這三種控制結(jié)構(gòu),會(huì)嚴(yán)重制約反編譯技術(shù)的發(fā)展,限制反編譯技術(shù)在其它領(lǐng)域的應(yīng)用。
復(fù)合條件分支的識(shí)別是結(jié)構(gòu)化程序設(shè)計(jì)語言中條件分支語句的編譯問題的逆命題。當(dāng)高級語言程序被編譯成了二進(jìn)制程序以后,其中的分支語句常常因?yàn)閮?nèi)部的復(fù)合條件而分裂成了多個(gè)條件跳轉(zhuǎn)指令,其單入口的結(jié)構(gòu)化特性遭到了破壞。如圖1所示,含有復(fù)合條件分支結(jié)構(gòu)的代碼對應(yīng)圖2中的控制流圖結(jié)構(gòu)。雖然原程序遵從單入口多出口的結(jié)構(gòu)化程序設(shè)計(jì)原則,但該程序被編譯后產(chǎn)生的二進(jìn)制程序的控制流圖中含有若干多入口、多出口結(jié)構(gòu),不再符合結(jié)構(gòu)化原則。
復(fù)合條件分支識(shí)別,就是如何將二進(jìn)制程序中分立的條件跳轉(zhuǎn)指令識(shí)別成一個(gè)完整的復(fù)合條件分支語句,從而在反編譯生成的高級語言程序結(jié)構(gòu)中仍然保持較好的結(jié)構(gòu)化特性。如果該問題不能較好的獲得解決,即不能準(zhǔn)確的將屬于同一個(gè)復(fù)合條件分支語句的條件跳轉(zhuǎn)指令集合識(shí)別出來,則需要補(bǔ)充額外的goto語句來銜接控制流,將會(huì)直接影響到反編譯最終生成的源程序的結(jié)構(gòu)化特性,進(jìn)而降低其可讀性,同時(shí)增大后期分析的難度。
復(fù)合條件分支識(shí)別問題被提出的時(shí)間很晚,研究進(jìn)展緩慢。雖然從可執(zhí)行文件獲得程序控制流信息的技術(shù)已經(jīng)很成熟,但是仍然沒有方法可以在程序控制流信息基礎(chǔ)上準(zhǔn)確有效識(shí)別復(fù)合條件分支結(jié)構(gòu)。
C.Cifuentes提出的啟發(fā)式方法是目前才用較多的方法(參見C.Cifucntes,“Reversecompilation techniques”,PhD Thesis,Queenslanc University of Technology,1994),但該方法存在大量漏報(bào),許多復(fù)合條件分支彼此相關(guān)時(shí),大量復(fù)合條件分支結(jié)構(gòu)不能被識(shí)別。
E.Moretti等人提出的方法(參見E.Moretti,G.Chanteperdrix,and A.Osorio,“NewAlgorithms for Control-Flow Graph Structuring”Proceeding of the Fifth EuropeanConference on Software Maintenance and Reengineering,2001)需要使用復(fù)雜的Interval/DSG結(jié)構(gòu),不僅操作復(fù)雜,效率低,而且在某些情形下會(huì)將不是復(fù)合條件分支結(jié)構(gòu)的語句錯(cuò)誤地識(shí)別為復(fù)合條件分支結(jié)構(gòu)。
K.Kaspersky提出的方法(參見K.Kaspersky,Hacker Disassembling Uncovered,黑客反匯編揭秘,A-List LLC,P384,2004)雖然有效,但是需要人為手工判斷,無法自動(dòng)化識(shí)別復(fù)合條件分支結(jié)構(gòu)。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于級聯(lián)分支網(wǎng)絡(luò)的復(fù)合條件分支識(shí)別的方法,能夠精確、自動(dòng)化識(shí)別復(fù)合條件分支結(jié)構(gòu)。
本發(fā)明的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其步驟包括1.對可執(zhí)行文件進(jìn)行反匯編,得到該可執(zhí)行文件的中間代碼;2.從上述中間代碼中提取控制流信息,得到控制流圖;3.遍歷控制流圖,得到級聯(lián)分支結(jié)構(gòu),其中該級聯(lián)分支結(jié)構(gòu)滿足;1)具有唯一的入口節(jié)點(diǎn),其該節(jié)點(diǎn)為該級聯(lián)分支結(jié)構(gòu)中所有其他節(jié)點(diǎn)的必經(jīng)節(jié)點(diǎn);2)具有兩出口節(jié)點(diǎn),該級聯(lián)分支結(jié)構(gòu)中的其他節(jié)點(diǎn)均存在到兩出口節(jié)點(diǎn)的路徑;3)除出口節(jié)點(diǎn)外的其他節(jié)點(diǎn)均是分支節(jié)點(diǎn);4)該級聯(lián)分支結(jié)構(gòu)中沒有循環(huán)路徑;4.將包含級聯(lián)分支結(jié)構(gòu)對應(yīng)的控制流圖識(shí)別為復(fù)合條件分支結(jié)構(gòu)。
本發(fā)明可以采取下述擴(kuò)展步驟遍歷控制流圖,得到級聯(lián)分支結(jié)構(gòu)按序遍歷控制流圖的所有節(jié)點(diǎn),將首次訪問的且不屬于任何已知級聯(lián)分支結(jié)構(gòu)的分支節(jié)點(diǎn)作為級聯(lián)分支結(jié)構(gòu)的第一個(gè)節(jié)點(diǎn);接著訪問該節(jié)點(diǎn)的直接后繼節(jié)點(diǎn),如該后繼節(jié)點(diǎn)為分支節(jié)點(diǎn),且不會(huì)與級聯(lián)分支結(jié)構(gòu)中的其他節(jié)點(diǎn)構(gòu)成循環(huán),同時(shí)該后繼節(jié)點(diǎn)的所有直接前驅(qū)節(jié)點(diǎn)均在級聯(lián)分支結(jié)構(gòu)內(nèi),則將該后繼節(jié)點(diǎn)作為級聯(lián)分支結(jié)構(gòu)的節(jié)點(diǎn),直到?jīng)]有新的節(jié)點(diǎn)可以作為該級聯(lián)分支結(jié)構(gòu)的節(jié)點(diǎn)。
對于上述確定的級聯(lián)分支結(jié)構(gòu),還可通過收縮步驟刪除其中的冗余節(jié)點(diǎn),以得到精確的級聯(lián)分支結(jié)構(gòu),其步驟如下
檢查上述級聯(lián)分支結(jié)構(gòu)中的節(jié)點(diǎn)是否具有位于級聯(lián)分支結(jié)構(gòu)之外的直接后繼分支節(jié)點(diǎn),當(dāng)這些節(jié)點(diǎn)的總數(shù)不等于2時(shí),刪除距離級聯(lián)分支結(jié)構(gòu)第一個(gè)節(jié)點(diǎn)最遠(yuǎn)的節(jié)點(diǎn),直到上述總數(shù)為2,將刪除上述節(jié)點(diǎn)后的級聯(lián)分支結(jié)構(gòu)作為精確的級聯(lián)分支結(jié)構(gòu)。
下面闡述本發(fā)明方法的原理,給出級聯(lián)分支網(wǎng)絡(luò)及相關(guān)概念的適當(dāng)說明。由于程序控制流圖、基本塊等概念為本領(lǐng)域基本概念,不作具體說明,可參考《編譯程序設(shè)計(jì)原理》一書(杜淑敏等,北京大學(xué)出版社,2003)。
擴(kuò)展基本塊在程序控制流圖中,如果一個(gè)基本塊b(對應(yīng)為控制流圖中的一個(gè)節(jié)點(diǎn))有且僅有一個(gè)直接后繼基本塊c,且基本塊c有且僅有一個(gè)直接前驅(qū)基本塊b,稱b,c是“可擴(kuò)展的基本塊”;合并可擴(kuò)展的基本塊b、c后,形成擴(kuò)展基本塊b′,并在程序控制流圖中,用b′代替b、c。重復(fù)所述過程,直至程序控制流圖中沒有可擴(kuò)展的基本塊。
分支基本塊分支基本塊b(對應(yīng)為控制流圖中的分支節(jié)點(diǎn))是一個(gè)有兩個(gè)直接后繼節(jié)點(diǎn)的擴(kuò)展基本塊。
偏序關(guān)系“<<”在控制流圖G中,對于兩個(gè)節(jié)點(diǎn)bi、bj,如果存在一條從bi到bj的路徑,稱bi<<bj。
級聯(lián)分支網(wǎng)絡(luò)級聯(lián)分支網(wǎng)絡(luò)T=(N’,E’,h’,t,f)是控制流圖(N,E,h)的子圖,進(jìn)一步滿足1)除t,f外,N’中節(jié)點(diǎn)都是分支基本塊;E’是N’中節(jié)點(diǎn)之間邊的集合;2)h’是T唯一的入口節(jié)點(diǎn),是T中所有其他節(jié)點(diǎn)的必經(jīng)節(jié)點(diǎn)(dominator);3)t、f是T有且僅有的兩個(gè)出口節(jié)點(diǎn);t、f外,T中任意節(jié)點(diǎn)n,都有n<<t且n<<fT中沒有循環(huán)路徑;由于級聯(lián)分支網(wǎng)絡(luò)內(nèi)部沒有循環(huán)路徑,所以各節(jié)點(diǎn)之間存在一致的偏序關(guān)系“<<”。本發(fā)明所述的級聯(lián)分支網(wǎng)絡(luò)概念,是級聯(lián)分支結(jié)構(gòu)的拓?fù)浔硎救我鈴?fù)合條件結(jié)構(gòu)對應(yīng)的控制流圖一定是級聯(lián)分支網(wǎng)絡(luò),而任意級聯(lián)分支網(wǎng)絡(luò),一定對應(yīng)某種復(fù)合條件分支結(jié)構(gòu)。因此,得到精確的級聯(lián)分支結(jié)構(gòu),就可以識(shí)別復(fù)合條件分支結(jié)構(gòu)。
由于現(xiàn)在反匯編技術(shù)已經(jīng)十分成熟,利用各種反匯編工具,如IDA Pro、Objdump,可以自動(dòng)化獲得可執(zhí)行文件的中間代碼表示以及提取程序的控制流信息。在可執(zhí)行文件的控制流信息基礎(chǔ)上,本發(fā)明可以精確識(shí)別復(fù)合條件分支結(jié)構(gòu),準(zhǔn)確結(jié)構(gòu)化程序控制流圖。
與現(xiàn)有技術(shù)不同之處在于,本發(fā)明首次提出與復(fù)合條件分支結(jié)構(gòu)等價(jià)的級聯(lián)分支網(wǎng)絡(luò)的概念,并在級聯(lián)分支網(wǎng)絡(luò)的結(jié)構(gòu)特征基礎(chǔ)上定義一種偏序關(guān)系,從而通過判定級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)復(fù)合條件分支結(jié)構(gòu)的精確識(shí)別。
本發(fā)明有如下優(yōu)勢1.本發(fā)明所述方法比傳統(tǒng)的C.Cifucntes提出的方法更加準(zhǔn)確,能夠識(shí)別復(fù)合條件分支相互耦合的情況;2.本發(fā)明所述方法比E.Moretti提出的方法更加準(zhǔn)確,不會(huì)將兩個(gè)相鄰的復(fù)合條件分支識(shí)別成一個(gè)復(fù)合條件分支,也不需要使用Interval/DSG等復(fù)雜數(shù)據(jù)結(jié)構(gòu)進(jìn)行輔助識(shí)別,效率更高。
3.本發(fā)明所述方法是完全自動(dòng)化識(shí)別復(fù)合條件分支結(jié)構(gòu),比K.Kaspersky提出的手工檢測方法更具實(shí)用性和推廣價(jià)值。
本發(fā)明的方法比現(xiàn)有的識(shí)別方法要更加準(zhǔn)確,漏報(bào)和誤報(bào)的情形有明顯改善;同時(shí)本方法是決定性方法,不需要進(jìn)行啟發(fā)式搜索或者使用Interval/DSG等復(fù)雜數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)效率與現(xiàn)有識(shí)別方法相比更高;而且本發(fā)明是完全自動(dòng)化識(shí)別復(fù)合條件分支結(jié)構(gòu)的方法。


圖1是高級語言中含復(fù)合條件分支結(jié)構(gòu)的代碼示例圖2是圖1中代碼對應(yīng)的控制流3是圖2中包含的分支網(wǎng)絡(luò)結(jié)構(gòu)圖4是本發(fā)明實(shí)例的分支網(wǎng)絡(luò)結(jié)構(gòu)擴(kuò)展過程示意5是圖4中分支網(wǎng)絡(luò)上界規(guī)模收縮過程示意6是具體實(shí)施實(shí)例中分支網(wǎng)絡(luò)擴(kuò)展步驟流程7是具體實(shí)施實(shí)例中分支網(wǎng)絡(luò)收縮步驟流程8為本發(fā)明方法在反編譯過程中所處環(huán)節(jié)示意圖具體實(shí)施方式
本發(fā)明方法在反編譯過程中所處的位置如圖8所示,在將可執(zhí)行文件進(jìn)行反編譯后,得到中間代碼信息,提取控制流信息,得到程序控制流圖。由前所述,現(xiàn)在反匯編技術(shù)已經(jīng)十分成熟,利用各種反匯編工具,如IDA Pro、Objdump,可以自動(dòng)化獲得可執(zhí)行文件的中間代碼表示以及提取程序的控制流信息。
對反匯編得到的控制流圖進(jìn)行遍歷,得到級聯(lián)分支結(jié)構(gòu),具體可以采用下述步驟1.級聯(lián)網(wǎng)絡(luò)擴(kuò)展步驟在程序控制流圖中,界定級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)的規(guī)模上界,確定所有可能屬于該級聯(lián)分支網(wǎng)絡(luò)的節(jié)點(diǎn)。
2.級聯(lián)網(wǎng)絡(luò)收縮步驟在上述過程基礎(chǔ)上,根據(jù)上述的偏序關(guān)系,在級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)的上界規(guī)模中,刪除冗余節(jié)點(diǎn),精確識(shí)別分支網(wǎng)絡(luò)結(jié)構(gòu)。
所述擴(kuò)展步驟,具體包括下列操作1)給定由反匯編得到的未識(shí)別復(fù)合條件分支結(jié)構(gòu)的程序控制流圖G=(N,E,h),以及程序基本塊空集合N1;2)按序遍歷控制流圖G,將首次訪問到的且不屬于任何級聯(lián)分支網(wǎng)絡(luò)的分支基本塊h’添加到集合N1中;3)集合P={bj|任意bi∈N1,bj是bi的直接后繼,bj是分支節(jié)點(diǎn),且bjN1}中的任意基本塊bj,如果bj所有的直接前驅(qū)節(jié)點(diǎn)都屬于N1,且N1中節(jié)點(diǎn)與bj不會(huì)構(gòu)成環(huán)路徑,則將bj添加到N1中;重復(fù)步驟3),直至N1不再變化。
經(jīng)過上述擴(kuò)展步驟,可以得到包含級聯(lián)分支結(jié)構(gòu)的信息,完全可以用于復(fù)合條件分支結(jié)構(gòu)的識(shí)別。
但通過擴(kuò)展步驟得到的級聯(lián)分支結(jié)構(gòu)可能包含一些冗余節(jié)點(diǎn),為保證得到精確的不存在冗余節(jié)點(diǎn)的級聯(lián)分支結(jié)構(gòu),以便更加精確地識(shí)別復(fù)合條件分支結(jié)構(gòu),本發(fā)明還可進(jìn)行收縮步驟,刪除冗余節(jié)點(diǎn)。
所述收縮步驟,具體包括下列操作1)給定由反匯編得到的未識(shí)別級聯(lián)分支結(jié)構(gòu)的程序控制流圖G=(N,E,h),以及擴(kuò)展步驟得到的程序基本塊集合N1,起始分支基本塊h’;其中N1為擴(kuò)展步驟中確定的級聯(lián)分支網(wǎng)絡(luò)上界集合;2)計(jì)算集合0={bj|任意bi∈N1,bi是bj的直接后繼,且bjN1}。
3)如果集合0中元素個(gè)數(shù)不等于2,刪除N1中由偏序關(guān)系”<<”定義的“最大”節(jié)點(diǎn)。由于是偏序關(guān)系,所以可能有多個(gè)“最大”節(jié)點(diǎn),此時(shí)則將這些“最大”節(jié)點(diǎn)全部刪除(在本發(fā)明中,N1中“最大”的節(jié)點(diǎn)具體指N1中距離h’最遠(yuǎn)的節(jié)點(diǎn))。跳轉(zhuǎn)到步驟2);4)如果集合0中元素個(gè)數(shù)等于2,令0中兩個(gè)元素分別為t和f,則T=(N1’,E1’,h’,t,f)形成級聯(lián)分支網(wǎng)絡(luò)。
下面結(jié)合附圖和實(shí)施實(shí)例對本發(fā)明的具體實(shí)施方案作進(jìn)一步的描述。
在具體實(shí)施實(shí)例中,本發(fā)明通過判定圖3所示的級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)而識(shí)別圖1代碼所示的復(fù)合條件分支結(jié)構(gòu)。
圖1中代碼示例的完整控制流圖見圖2。
為精確判定級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu),首先進(jìn)行分支網(wǎng)絡(luò)擴(kuò)展步驟,以界定級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)規(guī)模的上界,確定所有可能屬于該級聯(lián)分支網(wǎng)絡(luò)的節(jié)點(diǎn)。然后進(jìn)行分支網(wǎng)絡(luò)收縮步驟在級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)上界基礎(chǔ)上,刪除冗余節(jié)點(diǎn),精確識(shí)別級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)。
圖4為實(shí)施實(shí)例中級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)的擴(kuò)展步驟示意圖。參見圖6,詳細(xì)解釋分支網(wǎng)絡(luò)擴(kuò)展步驟具體工作流程給定未識(shí)別復(fù)合條件分支結(jié)構(gòu)的程序控制流圖G=(N,E,h),以及程序基本塊空集合N1;1.將首次訪問且不屬于任何已確定的級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)的分支節(jié)點(diǎn)h’添加至集合N1;如圖4(1)所示,分支節(jié)點(diǎn)“a<=b”添加至集合N1中;2.繼續(xù)執(zhí)行下列操作1)確定N1節(jié)點(diǎn)的直接后繼節(jié)點(diǎn)中,既是分支節(jié)點(diǎn)又不屬于N1的節(jié)點(diǎn)構(gòu)成的集合P;在實(shí)施實(shí)例中,N1中節(jié)點(diǎn)“a<b”的直接后繼節(jié)點(diǎn)“a==0”和“a?。絚”都是分支節(jié)點(diǎn),且不屬于N1,集合P={“a==0”,“a?。絚”};2)對于集合P中任意節(jié)點(diǎn)bj,如果bj的直接前驅(qū)都在N1中,且bj不會(huì)與N1中節(jié)點(diǎn)構(gòu)成循環(huán)路徑,則將bj添加至N1中;實(shí)施實(shí)例中,“a==0”和“a?。絚”的直接前驅(qū)都在N1中,且與N1中節(jié)點(diǎn)不構(gòu)成循環(huán)路徑?!癮==0”和“a!=c”添加至N1中;3)N1發(fā)生變化,繼續(xù)執(zhí)行擴(kuò)展步驟;重新確定N1節(jié)點(diǎn)的直接后繼節(jié)點(diǎn)中,既是分支節(jié)點(diǎn)又不屬于N1的節(jié)點(diǎn)構(gòu)成的集合P={“c==0”,“c!=d”};進(jìn)一步判斷,“c==0”、“c?。絛”的直接前驅(qū)都在N1中,且“c==0”、“c?。絛”與N1中節(jié)點(diǎn)不構(gòu)成循環(huán)路徑?!癱==0”,“c?。絛”添加至N1中;4)此時(shí)N1每一個(gè)節(jié)點(diǎn)的直接后繼節(jié)點(diǎn)中,既是分支節(jié)點(diǎn)又不屬于N1的節(jié)點(diǎn)構(gòu)成的集合P={},N1不再發(fā)生變化,級聯(lián)分支網(wǎng)絡(luò)上界規(guī)模確定。圖4(3)為實(shí)施實(shí)例的級聯(lián)分支網(wǎng)絡(luò)擴(kuò)展的結(jié)果,實(shí)線所繪節(jié)點(diǎn)為級聯(lián)分支網(wǎng)絡(luò)的上界規(guī)模。
圖5為實(shí)例中級聯(lián)分支網(wǎng)絡(luò)結(jié)構(gòu)收縮步驟示意圖。參加圖7,詳細(xì)解釋分支網(wǎng)絡(luò)收縮步驟具體操作1.初始集合N1是擴(kuò)展步驟確定的級聯(lián)分支網(wǎng)絡(luò)上界集合;本實(shí)例中,N1中節(jié)點(diǎn)為圖5(3)中實(shí)線所繪節(jié)點(diǎn),h’為節(jié)點(diǎn)”a<=b”;2.確定N1所有節(jié)點(diǎn)的直接后繼節(jié)點(diǎn)中,不屬于N1的節(jié)點(diǎn)構(gòu)成的集合0。如圖5(3)虛線所繪節(jié)點(diǎn),0={“printf(“OK”)”,“printf(“###”)”,“fin”};3.集合0中元素個(gè)數(shù)不等于2時(shí),根據(jù)前文定義的偏序關(guān)系”<<”,將N1中“最大”的節(jié)點(diǎn)刪除。在實(shí)施實(shí)例中,0中節(jié)點(diǎn)個(gè)數(shù)為3,其中節(jié)點(diǎn)“c!=d”為“最大”節(jié)點(diǎn),將其刪除;4.參見圖5(4),刪除節(jié)點(diǎn)“c?。絛”后,N1所有節(jié)點(diǎn)的直接后繼節(jié)點(diǎn)中,不屬于N1的節(jié)點(diǎn)構(gòu)成的集合0={“printf(“OK”)”,“c?。絛”}。此時(shí)0中元素個(gè)數(shù)為2;
5.0中元素個(gè)數(shù)為2時(shí),精確判定級聯(lián)分支網(wǎng)絡(luò)(N1,h’,t,f),其中N1={“a<b”,“a==0”,“a?。絚”,“c==0”},h’=”a<b”,,t=“printf(“OK”)”,f=“c?。絛”。
6.進(jìn)一步,N1可以精確識(shí)別圖1中所示的復(fù)合條件分支。將N1中分支結(jié)點(diǎn)合并后,即為(a>b)&&(a?。?))||((a==c)&&(c?。?))復(fù)合條件分支。
在級聯(lián)分支網(wǎng)絡(luò)擴(kuò)展步驟和級聯(lián)分支網(wǎng)絡(luò)收縮步驟處理后,本發(fā)明可以有效判定級聯(lián)分支網(wǎng)絡(luò),精確識(shí)別復(fù)合條件結(jié)構(gòu),有效結(jié)構(gòu)化程序控制流圖。本發(fā)明已在申請人研制的反編譯工具上應(yīng)用,取得了很好效果,實(shí)現(xiàn)了本發(fā)明的目的。
權(quán)利要求
1.一種復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其步驟包括1)對可執(zhí)行文件進(jìn)行反匯編,得到該可執(zhí)行文件的中間代碼;2)從上述中間代碼中提取控制流信息,得到控制流圖;3)遍歷控制流圖,得到級聯(lián)分支結(jié)構(gòu),其中該級聯(lián)分支結(jié)構(gòu)滿足;3-1)具有唯一的入口節(jié)點(diǎn),其該節(jié)點(diǎn)為該級聯(lián)分支結(jié)構(gòu)中所有其他節(jié)點(diǎn)的必經(jīng)節(jié)點(diǎn);3-2)具有兩出口節(jié)點(diǎn),該級聯(lián)分支結(jié)構(gòu)中的其他節(jié)點(diǎn)均存在到兩出口節(jié)點(diǎn)的路徑;3-3)除出口節(jié)點(diǎn)外,其他節(jié)點(diǎn)均為分支節(jié)點(diǎn);3-4)該級聯(lián)分支結(jié)構(gòu)中沒有循環(huán)路徑;4)將包含級聯(lián)分支結(jié)構(gòu)的控制流圖結(jié)構(gòu)識(shí)別為復(fù)合條件分支結(jié)構(gòu)。
2.如權(quán)利要求1所述的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其特征在于步驟3)采取下述擴(kuò)展步驟遍歷控制流圖,得到級聯(lián)分支結(jié)構(gòu)按序遍歷控制流圖的所有節(jié)點(diǎn),將首次訪問的且不屬于任何已知級聯(lián)分支結(jié)構(gòu)的分支節(jié)點(diǎn)作為級聯(lián)分支結(jié)構(gòu)的第一個(gè)節(jié)點(diǎn);接著訪問該節(jié)點(diǎn)的直接后繼節(jié)點(diǎn),如該后繼節(jié)點(diǎn)為分支節(jié)點(diǎn),且不會(huì)與級聯(lián)分支結(jié)構(gòu)中的其他節(jié)點(diǎn)構(gòu)成循環(huán),同時(shí)該后繼節(jié)點(diǎn)的所有直接前驅(qū)節(jié)點(diǎn)均在級聯(lián)分支結(jié)構(gòu)內(nèi),則將該后繼節(jié)點(diǎn)作為級聯(lián)分支結(jié)構(gòu)的節(jié)點(diǎn),直到?jīng)]有新的節(jié)點(diǎn)可以作為該級聯(lián)分支結(jié)構(gòu)的節(jié)點(diǎn)。
3.如權(quán)利要求2所述的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其特征在于通過收縮步驟刪除所述級聯(lián)分支結(jié)構(gòu)的冗余節(jié)點(diǎn)檢查上述級聯(lián)分支結(jié)構(gòu)中的節(jié)點(diǎn),確定是否具有位于級聯(lián)分支結(jié)構(gòu)之外的直接后繼分支節(jié)點(diǎn),當(dāng)這些節(jié)點(diǎn)的總數(shù)不等于2時(shí),刪除距離級聯(lián)分支結(jié)構(gòu)第一個(gè)節(jié)點(diǎn)最遠(yuǎn)的節(jié)點(diǎn),直到上述總數(shù)為2,將刪除上述節(jié)點(diǎn)后的級聯(lián)分支結(jié)構(gòu)作為精確的級聯(lián)分支結(jié)構(gòu)。
4.如權(quán)利要求1-3任一所述的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其特征在于所述節(jié)點(diǎn)為擴(kuò)展后的節(jié)點(diǎn)。
5.如權(quán)利要求1所述的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其特征在于采用反匯編工具IDA Pro對可執(zhí)行文件進(jìn)行反匯編。
6.如權(quán)利要求1所述的復(fù)合條件分支結(jié)構(gòu)的識(shí)別方法,其特征在于采用反匯編工具Objdump對可執(zhí)行文件進(jìn)行反匯編。
全文摘要
本發(fā)明涉及一種識(shí)別復(fù)合條件分支結(jié)構(gòu)的方法,其步驟包括對可執(zhí)行文件進(jìn)行反匯編,得到該可執(zhí)行文件的中間代碼;從上述中間代碼中提取控制流信息,得到控制流圖;遍歷控制流圖,得到級聯(lián)分支結(jié)構(gòu);將級聯(lián)分支結(jié)構(gòu)對應(yīng)的控制流圖識(shí)別為復(fù)合條件分支結(jié)構(gòu)。在可執(zhí)行文件的控制流信息基礎(chǔ)上,本發(fā)明可以精確、自動(dòng)化識(shí)別復(fù)合條件分支結(jié)構(gòu),準(zhǔn)確結(jié)構(gòu)化程序控制流圖,比現(xiàn)有的識(shí)別方法要更加準(zhǔn)確,漏報(bào)和誤報(bào)的情形有明顯改善,實(shí)現(xiàn)效率高??捎糜诜淳幾g、軟件測試等設(shè)備中。
文檔編號(hào)G06F9/45GK101063944SQ20061016967
公開日2007年10月31日 申請日期2006年12月27日 優(yōu)先權(quán)日2006年12月27日
發(fā)明者韋韜, 王鐵磊, 鄒維, 李佳靜, 毛劍, 王偉 申請人:北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1