欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

二進(jìn)制軟件分析的制作方法

文檔序號(hào):6349017閱讀:211來(lái)源:國(guó)知局
專利名稱:二進(jìn)制軟件分析的制作方法
技術(shù)領(lǐng)域
本發(fā)明大體上涉及計(jì)算機(jī)系統(tǒng),且更確切地說(shuō)涉及用于分析可執(zhí)行軟件以辨識(shí)特定函數(shù)、算法或模塊的方法及設(shè)備。
背景技術(shù)
計(jì)算機(jī)及移動(dòng)裝置配置有軟件,所述軟件用指令序列對(duì)計(jì)算機(jī)及移動(dòng)裝置的處理器發(fā)出指示。軟件通常是用源代碼編寫的,源代碼是一種人類可讀的計(jì)算機(jī)編程語(yǔ)言。為了讓處理器理解并執(zhí)行指令序列,必須將源代碼編譯成可執(zhí)行二進(jìn)制代碼,其是用處理器可執(zhí)行格式對(duì)指令進(jìn)行編碼的1及0的序列。將源代碼編譯成完成的可執(zhí)行格式的過(guò)程有時(shí)稱為“構(gòu)造”,且匯編的可執(zhí)行軟件有時(shí)稱為二進(jìn)制映象。隨著計(jì)算機(jī)及移動(dòng)裝置應(yīng)用的復(fù)雜性擴(kuò)大,軟件開(kāi)發(fā)人員逐漸需要使其能夠確定哪個(gè)源代碼已被編譯成可執(zhí)行二進(jìn)制映象的工具。此些工具可用于內(nèi)部分析,例如確保在構(gòu)造中包含漏洞修補(bǔ)(bug fix),或確保構(gòu)造中不包含通用公共許可證(GPL)碼。傳統(tǒng)的用于確保發(fā)布的軟件映象中沒(méi)有錯(cuò)誤的方法依賴于追蹤或分析用于產(chǎn)生給定可執(zhí)行二進(jìn)制映象的源代碼。然而,此些傳統(tǒng)方法無(wú)法直接分析可執(zhí)行二進(jìn)制映象,且因此可能不會(huì)準(zhǔn)確地反映二進(jìn)制映象中的內(nèi)容,且對(duì)于分析無(wú)源代碼可用的可執(zhí)行軟件來(lái)說(shuō)沒(méi)有多大價(jià)值。

發(fā)明內(nèi)容
各種實(shí)施例的方法及系統(tǒng)分析可執(zhí)行軟件二進(jìn)制軟件二進(jìn)制映象以便辨識(shí)特定函數(shù)、函數(shù)的部分、算法及算術(shù)塊。使軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化。識(shí)別二進(jìn)制映象內(nèi)的函數(shù)。將二進(jìn)制映象內(nèi)的每一識(shí)別出的函數(shù)與已知或參考函數(shù)的一個(gè)或一個(gè)以上參考二進(jìn)制映象比較,以確定是否存在匹配。參考函數(shù)二進(jìn)制映象可存儲(chǔ)于參考數(shù)據(jù)庫(kù)中,所述數(shù)據(jù)庫(kù)含有多個(gè)函數(shù)二進(jìn)制映象??赏ㄟ^(guò)比較位模式或通過(guò)比較通過(guò)將散列函數(shù)應(yīng)用于函數(shù)及參考函數(shù)產(chǎn)生的散列值來(lái)實(shí)現(xiàn)函數(shù)與參考函數(shù)的比較。在一實(shí)施例中,識(shí)別正分析的二進(jìn)制映象內(nèi)的函數(shù)內(nèi)的組成部分,且將其與參考函數(shù)或參考函數(shù)組成部分二進(jìn)制映象的數(shù)據(jù)庫(kù)內(nèi)的函數(shù)組成部分的二進(jìn)制映象比較。可通過(guò)比較相應(yīng)二進(jìn)制代碼中的位模式或通過(guò)比較通過(guò)將散列函數(shù)應(yīng)用于組成部分及參考組成部分中的每一者產(chǎn)生的散列值來(lái)實(shí)現(xiàn)組成部分與參考組成部分的比較??墒褂帽容^結(jié)果來(lái)確定軟件二進(jìn)制映象與一個(gè)或一個(gè)以上參考函數(shù)及/或函數(shù)的組成部分匹配的程度。


附圖并入本文中且構(gòu)成本說(shuō)明書的一部分,

本發(fā)明的示范性實(shí)施例,且與上文提供的一般描述及下文提供的詳細(xì)描述一起用以解釋本發(fā)明的特征。圖1是用于分析軟件二進(jìn)制映象的第一實(shí)施例方法的過(guò)程流程圖。圖2是用于分析軟件二進(jìn)制映象的替代實(shí)施例方法的過(guò)程流程圖。圖3是圖1中說(shuō)明的實(shí)施例方法的細(xì)節(jié)部分的過(guò)程流程圖。
圖4是圖1中說(shuō)明的實(shí)施例方法的另一細(xì)節(jié)部分的過(guò)程流程圖。圖5是圖4中說(shuō)明的替代細(xì)節(jié)部分的過(guò)程流程圖。圖6是用于分析軟件二進(jìn)制映象的替代實(shí)施例方法的過(guò)程流程圖。圖7是用于分析軟件二進(jìn)制映象的替代實(shí)施例方法的過(guò)程流程圖。圖8是用于分析軟件二進(jìn)制映象的替代實(shí)施例方法的過(guò)程流程圖。圖9是根據(jù)一實(shí)施例的用于產(chǎn)生參考函數(shù)二進(jìn)制映象數(shù)據(jù)庫(kù)的方法的過(guò)程流程圖。圖10是根據(jù)一實(shí)施例的用于產(chǎn)生參考函數(shù)及算術(shù)塊二進(jìn)制映象散列數(shù)據(jù)庫(kù)的方法的過(guò)程流程圖。圖11是適合于與各種實(shí)施例一起使用的計(jì)算機(jī)系統(tǒng)的組件圖。
具體實(shí)施例方式將參看附圖詳細(xì)描述各種實(shí)施例。只要可能,將在整個(gè)圖式中使用相同的參考標(biāo)號(hào)來(lái)指代相同或相似的部分。對(duì)特定實(shí)例及實(shí)施方案做出的參考是出于說(shuō)明性目的,且并不意在限制本發(fā)明或權(quán)利要求書的范圍。在此描述中,術(shù)語(yǔ)“示范性”在本文中用來(lái)意味著“充當(dāng)實(shí)例、例子或說(shuō)明”。不必將本文中描述為“示范性”的任何實(shí)施方案解釋為比其它實(shí)施方案優(yōu)選或有利。如本文中所使用,術(shù)語(yǔ)“計(jì)算機(jī)”及“計(jì)算機(jī)系統(tǒng)”意在包涵可能存在或未來(lái)將開(kāi)發(fā)的任何形式的可編程計(jì)算機(jī),包含例如個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、移動(dòng)計(jì)算裝置(例如, 蜂窩式電話、個(gè)人數(shù)據(jù)助理(PDA)、掌上型計(jì)算機(jī)、無(wú)線數(shù)據(jù)卡及多功能移動(dòng)裝置)、大型計(jì)算機(jī)、服務(wù)器及集成計(jì)算系統(tǒng)。計(jì)算機(jī)通常包含耦合到存儲(chǔ)器電路的軟件可編程處理器,但可進(jìn)一步包含下文參看圖11描述的組件。如本文中所使用,術(shù)語(yǔ)“軟件二進(jìn)制映象”、“二進(jìn)制映象”、“二進(jìn)制代碼”及“代碼” 是指采用二進(jìn)制形式(即,作為“1”及“0”的序列)的可執(zhí)行(即,編譯的)軟件。如本文中所使用,術(shù)語(yǔ)“代碼塊”、“代碼的塊”及“塊”是指二進(jìn)制映象的特定子集,例如成序列的若干位或字節(jié)。如本文中所使用,術(shù)語(yǔ)“函數(shù)”是指軟件指令序列,其在由處理器執(zhí)行時(shí)會(huì)實(shí)現(xiàn)某種期望的結(jié)果。一些函數(shù)可包含一個(gè)或一個(gè)以上其它函數(shù)。如本文中所使用,術(shù)語(yǔ)“組成部分”是指少于整個(gè)函數(shù)的函數(shù)部分。如本文中所使用,術(shù)語(yǔ)“模塊”是指單獨(dú)開(kāi)發(fā)及測(cè)試的應(yīng)用程序部分,且通常與產(chǎn)生應(yīng)用的可執(zhí)行二進(jìn)制映象的構(gòu)造中的其它模塊組合(在編譯之前或之后)。如本文中所使用,術(shù)語(yǔ)“散列算法”意在包涵任何形式的計(jì)算算法,在給定任意數(shù)據(jù)量的情況下,所述計(jì)算算法計(jì)算可用于(具有某種概率信任度)識(shí)別輸入數(shù)據(jù)的確切版本的固定大小數(shù)字。散列算法無(wú)需用密碼方式安全(即,難以確定計(jì)算出相同縮減數(shù)字的替代輸入),然而,其使用情境可能會(huì)強(qiáng)制性有此要求。如本文中所使用,術(shù)語(yǔ)“散列”及“散列值”意在指代散列算法的輸出。越來(lái)越需要了解哪個(gè)源代碼已編譯成可執(zhí)行二進(jìn)制映象。這個(gè)需要可由內(nèi)部分析驅(qū)動(dòng),例如確保構(gòu)造包含特定漏洞修補(bǔ)或不含有任何通用公共許可證(GPL)碼。在開(kāi)發(fā)復(fù)雜計(jì)算機(jī)軟件時(shí)遇到的常見(jiàn)問(wèn)題是確定特定軟件構(gòu)造是否包含包含已知漏洞或問(wèn)題的可執(zhí)行代碼部分。在復(fù)雜軟件構(gòu)造中,特定是在涉及許多不同開(kāi)發(fā)團(tuán)隊(duì)及實(shí)施人員的軟件中,即使已經(jīng)完全測(cè)試了每一個(gè)別軟件組成模塊,還是可能無(wú)意中引入軟件漏洞。當(dāng)前測(cè)試組成軟件模塊及追蹤源代碼血統(tǒng)的方法對(duì)于人類在匯編最終映象時(shí)的處理錯(cuò)誤很脆弱,且因此不是用于確??蓤?zhí)行二進(jìn)制映象版本無(wú)缺陷的理想方法。通常被引入到復(fù)雜軟件應(yīng)用中的漏洞是已知的,但駐留在被未意識(shí)到問(wèn)題的個(gè)人在整個(gè)匯編及構(gòu)造過(guò)程中的某個(gè)點(diǎn)無(wú)意中復(fù)制的小型算法、模塊或函數(shù)中。有缺陷的算法、模塊或函數(shù)可能幾乎無(wú)法與正確的代碼區(qū)分開(kāi)來(lái),且因此使用簡(jiǎn)單的比較技術(shù)不容易辨識(shí)。此外,漏洞可能駐留在編譯了大多模塊之后引入的代碼中,且因此無(wú)法通過(guò)分析源代碼來(lái)識(shí)別。存儲(chǔ)器使用、寄存器指派及變量名的變化會(huì)改變編譯的代碼的二進(jìn)制映象,從而導(dǎo)致無(wú)法使用直接的二進(jìn)制比較技術(shù)來(lái)發(fā)現(xiàn)有問(wèn)題的代碼。為了解決此問(wèn)題且克服調(diào)查源代碼及追蹤源代碼血統(tǒng)的傳統(tǒng)方法的缺點(diǎn),各種實(shí)施例提供用于直接分析軟件二進(jìn)制映象的方法。這些方法可辨識(shí)正分析的二進(jìn)制映象內(nèi)包含的特定參考函數(shù)、函數(shù)的組成部分、算法及算術(shù)塊。使用此些方法,可快速掃描軟件二進(jìn)制映象以確定是否包含任何已知有問(wèn)題的代碼元素,而無(wú)需依賴于對(duì)源代碼的分析。此外, 所述方法使得能夠掃描任何軟件二進(jìn)制映象,以確定是否有可能已包含任何已知軟件例程或模塊。舉例來(lái)說(shuō),可使用所述方法來(lái)確定是否已將任何公司軟件復(fù)制到僅作為可執(zhí)行二進(jìn)制映象可用的軟件中。本文中描述兩種用于識(shí)別給定軟件二進(jìn)制映象內(nèi)的源代碼血統(tǒng)的基本實(shí)施例方法。應(yīng)用第一實(shí)施例方法來(lái)識(shí)別完全的代碼匹配。也就是說(shuō),如果軟件二進(jìn)制映象中包含已知函數(shù),則將檢測(cè)到匹配。應(yīng)用第二實(shí)施例方法來(lái)檢測(cè)可能的代碼匹配。也就是說(shuō),如果函數(shù)含有已知實(shí)施方案的若干部分,則可檢測(cè)及報(bào)告已知實(shí)施方案的百分比。在完全匹配實(shí)施例方法中,在正分析的二進(jìn)制映象內(nèi)識(shí)別每一軟件函數(shù)??稍诙M(jìn)制映象中記錄或標(biāo)記所識(shí)別的函數(shù)的開(kāi)始及結(jié)束指令,或者可將含有每一函數(shù)的二進(jìn)制代碼的塊復(fù)制到臨時(shí)數(shù)據(jù)庫(kù)中。每一所識(shí)別的函數(shù)的寄存器指派及存儲(chǔ)器分配受到調(diào)整 (“正規(guī)化”)以與在參考函數(shù)二進(jìn)制映象的數(shù)據(jù)庫(kù)中指派存儲(chǔ)器地址及寄存器的方式一致。接著將每一所識(shí)別的且正規(guī)化的函數(shù)的二進(jìn)制代碼與參考函數(shù)的一個(gè)或一個(gè)以上二進(jìn)制映象比較以確定是否有任何匹配??稍谥鹞换蛑鹱止?jié)的基礎(chǔ)上使用位模式辨識(shí)技術(shù)來(lái)實(shí)現(xiàn)此比較。另一選擇是,作為優(yōu)化,可將散列算法應(yīng)用于對(duì)應(yīng)于正分析的每一函數(shù)的二進(jìn)制代碼以產(chǎn)生散列值,可將所述散列值與針對(duì)數(shù)據(jù)庫(kù)中的參考函數(shù)二進(jìn)制映象中的每一者產(chǎn)生的散列值進(jìn)行算術(shù)比較。當(dāng)發(fā)現(xiàn)散列值之間的匹配時(shí),可識(shí)別及記錄匹配。以此方式,可將二進(jìn)制映象中的每一函數(shù)與存儲(chǔ)于數(shù)據(jù)庫(kù)中的多個(gè)參考函數(shù)二進(jìn)制映象中的每一者個(gè)別比較,以便掃描二進(jìn)制映象以尋找與參考函數(shù)庫(kù)的匹配??赡芷ヅ鋵?shí)施例方法類似于完全匹配實(shí)施例方法,區(qū)別在于,所述比較可在函數(shù)組成部分的級(jí)別實(shí)現(xiàn)??蓪⒖紨?shù)據(jù)庫(kù)中的每一參考函數(shù)的二進(jìn)制映象分解成其組成部分,組成部分二進(jìn)制映象存儲(chǔ)于函數(shù)及函數(shù)組成部分二進(jìn)制映象的參考數(shù)據(jù)庫(kù)中。任選地, 可針對(duì)參考數(shù)據(jù)庫(kù)中的函數(shù)二進(jìn)制映象及函數(shù)組成部分二進(jìn)制映象中的每一者產(chǎn)生一散列,所得的散列值存儲(chǔ)于參考散列數(shù)據(jù)庫(kù)中。對(duì)正分析的軟件二進(jìn)制映象進(jìn)行預(yù)處理以使寄存器及存儲(chǔ)器地址參考正規(guī)化,且接著將其分解成可記錄、標(biāo)記或存儲(chǔ)于臨時(shí)數(shù)據(jù)庫(kù)中的函數(shù)及函數(shù)的組成部分??山又弥鹞换蛑鹱止?jié)的方式將組成部分中的每一者與存儲(chǔ)于編譯的函數(shù)組成部分的參考數(shù)據(jù)庫(kù)中的函數(shù)組成部分比較。任選地,可將散列函數(shù)應(yīng)用于每一組成部分二進(jìn)制映象以產(chǎn)生散列值??蓪⒚恳唤M成部分散列值與參考散列數(shù)據(jù)庫(kù)比較,且識(shí)別匹配??僧a(chǎn)生與數(shù)據(jù)庫(kù)匹配的每一匹配的函數(shù)及組成部分的表或類似列表??苫谲浖M(jìn)制映象中與參考散列數(shù)據(jù)庫(kù)中反映的參考函數(shù)的組成部分匹配的組成部分的百分比,來(lái)推斷正分析的二進(jìn)制映象內(nèi)的函數(shù)與參考數(shù)據(jù)庫(kù)內(nèi)的參考函數(shù)相同或幾乎相同的可能性。正分析的二進(jìn)制映象內(nèi)的任何給定函數(shù)可能與來(lái)自一個(gè)或一個(gè)以上參考函數(shù)的組成部分匹配。如果二進(jìn)制映象內(nèi)的函數(shù)內(nèi)的組成部分中有較大百分比與參考數(shù)據(jù)庫(kù)中的組成部分二進(jìn)制映象匹配,則這可能指示有可能已復(fù)制了函數(shù)或函數(shù)的若干部分??山又鴮?duì)正分析的二進(jìn)制映象的與參考函數(shù)數(shù)據(jù)庫(kù)內(nèi)的匹配的參考函數(shù)二進(jìn)制映象匹配的部分進(jìn)行更加深入的分析,借此確定可能的匹配。此更加深入的后續(xù)分析可能包含對(duì)二進(jìn)制映象的逐位分析,或?qū)τ趯?duì)應(yīng)源代碼的逐行審閱。—種用于確認(rèn)特定大型二進(jìn)制代碼塊是否與另一塊相同的方法是向每一二進(jìn)制代碼塊應(yīng)用散列算法,例如循環(huán)冗余校驗(yàn)(CRC)算法或MD5密碼散列算法,以產(chǎn)生數(shù)字 (即,散列值),且接著比較所述兩個(gè)散列值。此些方法可用于通過(guò)將特定軟件二進(jìn)制映象的散列值與鑒定機(jī)構(gòu)提供的散列值比較來(lái)鑒定所述軟件二進(jìn)制映象。當(dāng)鑒定機(jī)構(gòu)測(cè)試及確認(rèn)特定軟件二進(jìn)制映象沒(méi)有錯(cuò)誤或惡意軟件時(shí),所述機(jī)構(gòu)可使用私用加密密鑰來(lái)產(chǎn)生所述軟件二進(jìn)制映象的密碼散列。在一些實(shí)施方案中,鑒定機(jī)構(gòu)可使用私用加密密鑰,其允許接收方對(duì)數(shù)字簽名進(jìn)行解碼,以便還確認(rèn)鑒定機(jī)構(gòu)產(chǎn)生了密碼散列。接著,將散列值包含在發(fā)布的軟件包中,使得計(jì)算機(jī)可對(duì)軟件二進(jìn)制映象執(zhí)行類似的密碼散列算法及將結(jié)果與同軟件相關(guān)聯(lián)的散列值比較,借此確認(rèn)軟件二進(jìn)制映象版本。此些方法在計(jì)算機(jī)領(lǐng)域中是眾所周知的。然而,此傳統(tǒng)的散列比較方法僅確定兩個(gè)二進(jìn)制映象是否相同。在映象中的一者內(nèi)隱藏較深的兩個(gè)二進(jìn)制映象之間的即使微小的差別,也將導(dǎo)致不同的所產(chǎn)生的散列值。因此,驗(yàn)證軟件二進(jìn)制映象的傳統(tǒng)散列比較方法無(wú)法確定關(guān)于所包含的函數(shù)及函數(shù)的組成部分的任何信息。圖1是說(shuō)明可在完全匹配實(shí)施例方法中實(shí)施的實(shí)例步驟的過(guò)程流程圖。如上所述,此實(shí)施例方法設(shè)法識(shí)別正分析的軟件二進(jìn)制映象內(nèi)與可存儲(chǔ)于函數(shù)二進(jìn)制映象的參考數(shù)據(jù)庫(kù)中的一個(gè)或一個(gè)以上已知參考函數(shù)的完全函數(shù)匹配。可由配置有用以執(zhí)行實(shí)施例方法的軟件的計(jì)算機(jī)來(lái)接收可執(zhí)行軟件二進(jìn)制映象(步驟10)。軟件二進(jìn)制映象可用各種形式接收,包含例如在例如壓縮光盤(CD)、數(shù)字視頻/多功能光盤(DVD)等有形存儲(chǔ)媒體上、從例如光盤驅(qū)動(dòng)器或USB存儲(chǔ)器單元等內(nèi)部或外部存儲(chǔ)器,或經(jīng)由網(wǎng)絡(luò)連接從網(wǎng)絡(luò)接收。一旦接收到軟件二進(jìn)制映象,便可對(duì)其進(jìn)行預(yù)處理以使其準(zhǔn)備好接受分析。此預(yù)處理包含使二進(jìn)制映象內(nèi)的寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化的二進(jìn)制映象(步驟12),及在二進(jìn)制映象內(nèi)識(shí)別函數(shù)邊界(步驟14)。雖然圖1展示了使寄存器及存儲(chǔ)器地址正規(guī)化的步驟(步驟1 是在識(shí)別二進(jìn)制映象內(nèi)的函數(shù)邊界的步驟(步驟14)之前,但所述順序只是為了說(shuō)明性目的,僅僅是因?yàn)檫@些步驟也可用相反順序(即,步驟14在步驟 12之前)或在相同預(yù)處理步驟中執(zhí)行。在使寄存器及存儲(chǔ)器地址正規(guī)化的過(guò)程步驟(步驟12)中,掃描正分析的軟件二進(jìn)制映象以識(shí)別對(duì)存儲(chǔ)器寄存器及存儲(chǔ)器地址的參考,且將識(shí)別出的寄存器及地址改變成正規(guī)化值,例如全部為零。所述正規(guī)化值是指派給用于存儲(chǔ)于如下文進(jìn)一步描述的參考函數(shù)數(shù)據(jù)庫(kù)22中的參考函數(shù)的存儲(chǔ)器寄存器及地址的相同值。進(jìn)行寄存器及存儲(chǔ)器地址的此正規(guī)化是為了確保對(duì)軟件二進(jìn)制映象的分析可辨識(shí)函數(shù)及指令模式,而不會(huì)受到寄存器及存儲(chǔ)器地址指派的誤導(dǎo)。通常對(duì)編譯的軟件的不同塊的寄存器及存儲(chǔ)器地址指派將取決于包含于軟件的圍繞特定函數(shù)的其它部分中的存儲(chǔ)器指派。寄存器及存儲(chǔ)器地址指派的此變化會(huì)引起在軟件二進(jìn)制映象內(nèi)識(shí)別函數(shù)塊的問(wèn)題,因?yàn)樵诓煌浖?gòu)造中實(shí)施的兩個(gè)相同函數(shù)可能會(huì)被指派不同的寄存器及存儲(chǔ)器地址,從而使兩個(gè)軟件二進(jìn)制映象顯得不同。 使軟件二進(jìn)制映象內(nèi)的寄存器及存儲(chǔ)器地址正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象,使得后續(xù)分析能夠集中于指令序列,因?yàn)樵谡治龅亩M(jìn)制映象及存儲(chǔ)于參考數(shù)據(jù)庫(kù)22中的參考函數(shù)二進(jìn)制映象內(nèi)的所有寄存器及地址于是將相同??墒褂酶鞣N方法在正分析的二進(jìn)制映象中識(shí)別存儲(chǔ)器寄存器及地址指派,所述方法包含使用反編譯器或眾所周知的用于識(shí)別給定處理器上的給定編譯器的函數(shù)的開(kāi)頭及結(jié)尾的技術(shù)來(lái)分析二進(jìn)制映象(步驟16),或如下文參看圖3所述掃描二進(jìn)制映象以辨識(shí)二進(jìn)制序列內(nèi)的寄存器或存儲(chǔ)器地址參考。為了在函數(shù)級(jí)別分析軟件二進(jìn)制映象,還分析軟件二進(jìn)制映象以在二進(jìn)制序列內(nèi)識(shí)別函數(shù)邊界(步驟14)。此過(guò)程主要將軟件二進(jìn)制映象分解成二進(jìn)制代碼的函數(shù)塊,可對(duì)所述函數(shù)塊進(jìn)行個(gè)別分析且與存儲(chǔ)于參考數(shù)據(jù)庫(kù)22中的已知函數(shù)比較。在函數(shù)級(jí)別分析軟件二進(jìn)制映象使得實(shí)施例方法能夠辨識(shí)編譯的軟件內(nèi)的特定函數(shù),而不必考慮被編譯以創(chuàng)建二進(jìn)制映象的源代碼。可使用已知方法在軟件二進(jìn)制映象的二進(jìn)制序列內(nèi)識(shí)別函數(shù)邊界,所述方法例如是反編譯器應(yīng)用或眾所周知的用于識(shí)別給定處理器上的給定編譯器的函數(shù)的開(kāi)頭及結(jié)尾的技術(shù)(步驟16),所述步驟剖析二進(jìn)制序列,從而辨識(shí)指令及識(shí)別函數(shù)塊。另一選擇為,實(shí)施例方法可掃描二進(jìn)制映象的整個(gè)二進(jìn)制序列以識(shí)別與函數(shù)的開(kāi)頭及結(jié)尾相關(guān)聯(lián)的指令模式,且如下文參看圖4更完整描述,使用所述辨識(shí)出的指令模式來(lái)測(cè)定函數(shù)邊界。當(dāng)在正分析的二進(jìn)制映象內(nèi)識(shí)別出函數(shù)邊界時(shí),可將與每一函數(shù)相關(guān)聯(lián)的二進(jìn)制代碼的塊的開(kāi)頭及結(jié)尾位的位置存儲(chǔ)于存儲(chǔ)器中,例如用指針的形式存儲(chǔ),或者用添加到二進(jìn)制映象的邊界標(biāo)簽(例如,旗標(biāo)或唯一位模式)來(lái)識(shí)別所述位置。另一選擇為,可將二進(jìn)制代碼的每一函數(shù)塊單獨(dú)存儲(chǔ)于函數(shù)的臨時(shí)數(shù)據(jù)庫(kù)中。將開(kāi)頭及結(jié)尾位位置存儲(chǔ)于存儲(chǔ)器中,或用函數(shù)邊界標(biāo)簽來(lái)標(biāo)記二進(jìn)制映象,使得后續(xù)處理能夠作用于軟件二進(jìn)制映象從開(kāi)始到結(jié)束的整個(gè)二進(jìn)制序列,從而用每一函數(shù)在二進(jìn)制映象中出現(xiàn)時(shí)的序列來(lái)分析每一函數(shù)。在臨時(shí)數(shù)據(jù)庫(kù)中分開(kāi)存儲(chǔ)識(shí)別出的函數(shù)的二進(jìn)制代碼塊,準(zhǔn)許用任意序列來(lái)分析每一函數(shù),而無(wú)需對(duì)正分析的二進(jìn)制映象進(jìn)行進(jìn)一步剖析。每一識(shí)別出的函數(shù)的二進(jìn)制代碼塊還可用其在正分析的二進(jìn)制映象中出現(xiàn)時(shí)的順序存儲(chǔ)于臨時(shí)數(shù)據(jù)庫(kù)中,從而能用函數(shù)出現(xiàn)時(shí)的序列來(lái)分析所述函數(shù)。在使寄存器及存儲(chǔ)器地址正規(guī)化且識(shí)別出函數(shù)邊界(或?qū)⒑瘮?shù)個(gè)別存儲(chǔ)于臨時(shí)數(shù)據(jù)庫(kù)內(nèi))后,可開(kāi)始個(gè)別分析每一函數(shù)的過(guò)程??扇鐖D1所示用在整個(gè)軟件二進(jìn)制映象中操作的循環(huán)來(lái)執(zhí)行此處理。為進(jìn)行此操作,選擇代碼的函數(shù)塊來(lái)進(jìn)行分析(步驟18)。在通過(guò)分析循環(huán)的第一遍中,在步驟18中選擇的代碼的函數(shù)塊將是二進(jìn)制序列中或臨時(shí)數(shù)據(jù)庫(kù)內(nèi)的代碼的第一函數(shù)塊,而在通過(guò)分析循環(huán)的后續(xù)遍中,在步驟18中選擇的代碼的下一函數(shù)塊將是二進(jìn)制序列或數(shù)據(jù)庫(kù)。在此選擇中,可將與選定函數(shù)相關(guān)聯(lián)的整個(gè)代碼塊存儲(chǔ)于有源存儲(chǔ)器中,以便可在測(cè)試20中將所述代碼塊內(nèi)的位的模式與參考函數(shù)的參考二進(jìn)制映象比較。可將參考二進(jìn)制映象存儲(chǔ)于參考數(shù)據(jù)庫(kù)22中,以便可將每一選定函數(shù)與數(shù)據(jù)庫(kù)內(nèi)的一個(gè)、一些或所有參考函數(shù)比較??墒褂帽娝苤挠糜诒容^位序列的方法來(lái)實(shí)現(xiàn)此比較測(cè)試20,所述方法包含模式辨識(shí)及逐位或逐字節(jié)比較??稍跍y(cè)試20中將單個(gè)參考函數(shù)二進(jìn)制映象與代碼的選定函數(shù)塊比較,當(dāng)正進(jìn)行分析以確定特定函數(shù)是否已包含于正分析的二進(jìn)制映象中時(shí)可能就是這種情況。另一選擇為,可將參考函數(shù)二進(jìn)制映象的數(shù)據(jù)庫(kù) 22內(nèi)的多個(gè)參考二進(jìn)制映象與代碼的選定函數(shù)塊比較,以確定數(shù)據(jù)庫(kù)中包含的函數(shù)中的任一者是否存在于正分析的代碼的選定函數(shù)塊中。在一實(shí)施例中,可在子單元級(jí)別(即,代碼的選定塊的部分)將代碼的選定函數(shù)塊與參考數(shù)據(jù)庫(kù)22中的參考函數(shù)二進(jìn)制映象比較,而不是將代碼的整個(gè)選定塊總體與參考函數(shù)二進(jìn)制映象比較。舉例來(lái)說(shuō),可對(duì)代碼的選定塊內(nèi)的若干字節(jié)(例如一次四個(gè)到十個(gè)字節(jié))執(zhí)行分析,以便使比較過(guò)程簡(jiǎn)化。作為另一實(shí)例,可在算術(shù)單元的級(jí)別執(zhí)行分析,例如通過(guò)在條件語(yǔ)句(即,將依據(jù)條件測(cè)試產(chǎn)生分支的指令,例如“如果一那么”軟件步驟的編譯的實(shí)施方案)之間選擇代碼塊。此逐塊或逐段分析可能比整個(gè)函數(shù)比較執(zhí)行起來(lái)更容易,且可用來(lái)辨識(shí)已用與存儲(chǔ)于參考數(shù)據(jù)庫(kù)22中的參考函數(shù)的二進(jìn)制映象稍微不同的方式實(shí)施的函數(shù)??山又鴮⒅饓K或逐段比較的結(jié)果組合,以在測(cè)試20中確定在步驟18中選擇的整個(gè)函數(shù)是否與參考數(shù)據(jù)庫(kù)22中的函數(shù)匹配。換句話說(shuō),如果所有塊或段均與參考數(shù)據(jù)庫(kù)22中的函數(shù)內(nèi)的對(duì)應(yīng)塊或段匹配,且順序與其在參考函數(shù)中出現(xiàn)時(shí)的順序相同,那么選定函數(shù)與所述特定參考函數(shù)匹配。如果所有塊或段均與參考數(shù)據(jù)庫(kù)22中的函數(shù)內(nèi)的對(duì)應(yīng)塊或段匹配,但順序未必與其在參考函數(shù)中出現(xiàn)時(shí)的順序相同,則這指示所述函數(shù)有可能匹配。類似地,如果許多塊或段與參考數(shù)據(jù)庫(kù)22中的函數(shù)內(nèi)的對(duì)應(yīng)塊或段匹配,這也指示所述函數(shù)有可能在功能方面是等效的。如下文更完整論述,如果比較結(jié)果表明可能存在匹配,則可進(jìn)行進(jìn)一步分析以確定選定函數(shù)及參考函數(shù)是否完全匹配,或者參考函數(shù)是否已被復(fù)制。在又一實(shí)施例中,可將模式匹配與文本分析器中使用的分析技術(shù)組合,以在并非所有塊或段均與參考數(shù)據(jù)庫(kù)22內(nèi)的參考函數(shù)的塊或段匹配時(shí)辨識(shí)函數(shù)內(nèi)的匹配塊或段。 在一些情況下,函數(shù)的實(shí)施方案可能使得某一代碼散布于函數(shù)內(nèi)的常見(jiàn)組成部分之間,使得代碼的選定函數(shù)塊可能不與參考數(shù)據(jù)庫(kù)22內(nèi)的參考函數(shù)完全匹配,即使在運(yùn)算中所述函數(shù)在功能方面等效時(shí)也是如此。舉例來(lái)說(shuō),參考數(shù)據(jù)庫(kù)22內(nèi)的參考函數(shù)可能在正分析的二進(jìn)制映象中稍被修改,在選定函數(shù)的中間的某個(gè)位置添加了某一代碼,但這并未改變其整個(gè)過(guò)程。作為一實(shí)例,可實(shí)施一函數(shù),其中特定的組成部分被替換成等效但稍有不同的組成部分。作為另一實(shí)例,可將某一無(wú)關(guān)緊要的代碼添加到函數(shù),以便使代碼的整個(gè)函數(shù)塊顯得不同。當(dāng)在逐塊或逐段的基礎(chǔ)上將此選定函數(shù)與參考函數(shù)比較時(shí),可能發(fā)現(xiàn)若干塊或段與參考數(shù)據(jù)庫(kù)22中的參考函數(shù)的塊或段匹配,直到遇到插入或改變的部分為止,此時(shí)將不會(huì)發(fā)現(xiàn)匹配。于是,選定函數(shù)內(nèi)的后續(xù)塊或段將不匹配,因?yàn)樘娲幕虿迦氲亩M(jìn)制代碼將使代碼的選定函數(shù)塊中的二進(jìn)制代碼的其余部分相對(duì)于參考數(shù)據(jù)庫(kù)22中的參考函數(shù)二進(jìn)制映象中的位序列偏離。為了克服此問(wèn)題,可實(shí)施模式辨識(shí)軟件(例如在文本分析器應(yīng)用中使用的)以掃描代碼的選定函數(shù)塊中在不匹配塊或段之后的位序列,以確定是否可用參考數(shù)據(jù)庫(kù)22中的參考函數(shù)二進(jìn)制映象來(lái)為代碼的選定函數(shù)塊重新排序。在此過(guò)程中,分析后續(xù)位模式以確定代碼的選定函數(shù)塊與參考函數(shù)二進(jìn)制映象之間是否存在任何匹配模式。如果在代碼的選定函數(shù)塊內(nèi)辨識(shí)出后續(xù)位模式匹配,則可使用此信息在位模式匹配的點(diǎn)重新啟動(dòng)與參考函數(shù)二進(jìn)制映象的逐塊或逐段比較。使用此方法,即使當(dāng)用不同順序?qū)嵤┙M成部分或已修改了正分析的代碼塊而隱藏其已被復(fù)制的事實(shí)時(shí),也可識(shí)別出函數(shù)匹配。如果在測(cè)試20中進(jìn)行的代碼匹配分析確定代碼的選定函數(shù)塊與參考數(shù)據(jù)庫(kù)22內(nèi)的參考函數(shù)二進(jìn)制映象匹配或接近匹配,則可記錄與參考函數(shù)的特定匹配(步驟30)。除非僅搜索單個(gè)函數(shù)(在此情況下,匹配可使得過(guò)程終止),否則可通過(guò)確定二進(jìn)制映象中是否還有另一函數(shù)要分析(測(cè)試32)而繼續(xù)所述過(guò)程,且如果是的話,則返回到選擇代碼的下一要分析的函數(shù)塊的過(guò)程步驟(步驟18)。如果在測(cè)試20中進(jìn)行的代碼匹配分析確定選定函數(shù)塊并不與參考數(shù)據(jù)庫(kù)22內(nèi)的參考函數(shù)二進(jìn)制映象匹配或接近匹配(即,測(cè)試20 = “否”),則所述過(guò)程可繼續(xù)以通過(guò)確定是否還有另一函數(shù)要分析(測(cè)試3 來(lái)選擇代碼的下一要分析的函數(shù)塊,且如果是的話,則返回到選擇代碼的下一要分析的函數(shù)塊的過(guò)程步驟 (步驟18)。一旦已分析了正分析的二進(jìn)制映象內(nèi)的所有函數(shù)(即,測(cè)試32 = “否”),則分析過(guò)程可通過(guò)列出所有被發(fā)現(xiàn)與參考數(shù)據(jù)庫(kù)22內(nèi)包含的參考函數(shù)匹配的函數(shù)(步驟34) 而終止。圖2中說(shuō)明用于分析軟件二進(jìn)制映象以尋找與參考數(shù)據(jù)庫(kù)內(nèi)的參考函數(shù)二進(jìn)制映象的完全或接近完全匹配的替代實(shí)施例。在此替代實(shí)施例中,用對(duì)代碼段散列值的更加高效的比較來(lái)取代二進(jìn)制代碼的選定部分與函數(shù)二進(jìn)制映象庫(kù)的逐位、逐塊或逐段比較的處理器密集型步驟。如上所述,可使用散列算法將大二進(jìn)制序列(例如,編譯的軟件代碼的一部分)轉(zhuǎn)換成對(duì)于所述特定二進(jìn)制映象來(lái)說(shuō)在統(tǒng)計(jì)學(xué)上唯一的小得多的數(shù)字。兩個(gè)不同二進(jìn)制映象將產(chǎn)生相同散列值的概率取決于二進(jìn)制映象的大小及散列值中的數(shù)字的數(shù)目, 但是對(duì)于典型的散列算法來(lái)說(shuō),此概率非常低,以至于可將散列值視為唯一地識(shí)別其相關(guān)聯(lián)的二進(jìn)制映象。比較兩個(gè)散列值是簡(jiǎn)單的算術(shù)運(yùn)算,因?yàn)榭珊?jiǎn)單地將兩個(gè)數(shù)字相減以確定是否有余數(shù)一如果有余數(shù),那么所述兩個(gè)二進(jìn)制映象是不同的。由于此簡(jiǎn)化的處理,可將函數(shù)及函數(shù)組成部分快速地與大量參考函數(shù)二進(jìn)制映象比較。然而,選定函數(shù)塊與參考函數(shù)映象之間的細(xì)微差別將產(chǎn)生不存在匹配的確定,即使上文參看圖1所述的逐塊或逐段比較可能檢測(cè)到匹配也是如此。因此,圖2中說(shuō)明的實(shí)施例能夠更快速得多地對(duì)照大數(shù)據(jù)庫(kù)分析二進(jìn)制映象,但缺點(diǎn)是接近匹配可能會(huì)被忽略。圖2中說(shuō)明的實(shí)施例中涉及的過(guò)程步驟涉及上文參看圖1所述的許多步驟。確切地說(shuō),對(duì)在步驟10中接收到的軟件二進(jìn)制映象進(jìn)行預(yù)處理以使寄存器及存儲(chǔ)器參考正規(guī)化(步驟12),且識(shí)別函數(shù)邊界(步驟14)。與圖1中說(shuō)明的實(shí)施例一樣,對(duì)軟件二進(jìn)制映象的分析可在循環(huán)中繼續(xù),以輪流分析每一識(shí)別出的函數(shù)。為了分析每一函數(shù),選擇一函數(shù), 且針對(duì)所述選定代碼塊產(chǎn)生散列值(步驟19)。與上文參看圖1所述的步驟18 —樣,在通過(guò)分析循環(huán)的第一遍中,在步驟19中選擇的代碼的函數(shù)塊將是二進(jìn)制序列內(nèi)或臨時(shí)數(shù)據(jù)庫(kù)內(nèi)的第一者,而在通過(guò)分析循環(huán)的后續(xù)遍中,在步驟19中選擇的代碼的下一函數(shù)塊將是二進(jìn)制序列或數(shù)據(jù)庫(kù)。可接著在測(cè)試21中將針對(duì)代碼的選定函數(shù)塊產(chǎn)生的散列值與特定參考函數(shù)二進(jìn)制映象的散列值或散列數(shù)據(jù)庫(kù)M內(nèi)的散列值比較。用于針對(duì)在步驟19中選擇的函數(shù)產(chǎn)生散列值的散列算法與用于產(chǎn)生參考函數(shù)二進(jìn)制映象的散列值的散列算法相同。在一實(shí)施例中,散列算法是單向散列,例如CRC算法。雖然可在測(cè)試21中的比較時(shí)產(chǎn)生任何參考函數(shù)二進(jìn)制映象的散列值,但更高效的方法涉及針對(duì)存儲(chǔ)于參考數(shù)據(jù)庫(kù)22中的參考函數(shù)二進(jìn)制映象產(chǎn)生散列值,及在散列數(shù)據(jù)庫(kù)M中存儲(chǔ)所述散列值。此散列數(shù)據(jù)庫(kù)M可包含識(shí)別與每一散列值相關(guān)聯(lián)的參考函數(shù)的識(shí)別符(ID)。可接著在開(kāi)始對(duì)軟件二進(jìn)制映象的分析之前的任何時(shí)間產(chǎn)生散列數(shù)據(jù)庫(kù) 24。通過(guò)使用眾所周知的二進(jìn)制數(shù)字比較技術(shù)(例如,相減及余數(shù)測(cè)試),在測(cè)試21中實(shí)現(xiàn)的比較可快速地確定針對(duì)代碼的選定函數(shù)塊產(chǎn)生的散列值是否與存儲(chǔ)于散列數(shù)據(jù)庫(kù) M中的散列值中的任一者匹配。如果檢測(cè)到任何匹配(即,測(cè)試21 = “是”),則可在步驟 30中記錄散列數(shù)據(jù)庫(kù)M中的匹配散列值的識(shí)別符。一旦記錄了函數(shù)匹配(步驟30),或如果未檢測(cè)到散列匹配(測(cè)試21 = “否”),則可通過(guò)確定二進(jìn)制映象中是否還有另一函數(shù)要分析(測(cè)試3 而繼續(xù)所述過(guò)程,且如果是的話,則返回以選擇代碼的下一要分析的函數(shù)塊且產(chǎn)生其散列值(步驟19)。一旦已分析了正分析的二進(jìn)制映象內(nèi)的所有函數(shù)(即,測(cè)試 32 = “否”),則分析過(guò)程可通過(guò)列出所有被發(fā)現(xiàn)與參考數(shù)據(jù)庫(kù)22內(nèi)包含的參考函數(shù)匹配的函數(shù)(步驟34)而終止。如上所述,可通過(guò)使用反編譯器應(yīng)用或眾所周知的用于識(shí)別給定處理器上的給定編譯器的函數(shù)的開(kāi)頭及結(jié)尾的技術(shù)(步驟16),或通過(guò)直接掃描正分析的二進(jìn)制映象以辨識(shí)寄存器或存儲(chǔ)器地址參考,來(lái)識(shí)別及正規(guī)化存儲(chǔ)器寄存器及存儲(chǔ)器地址值(步驟1 。圖 3中說(shuō)明可在步驟12內(nèi)實(shí)施以掃描正分析的二進(jìn)制映象以尋找寄存器及存儲(chǔ)器地址參考的過(guò)程步驟的實(shí)例。在此過(guò)程中,可選擇二進(jìn)制映象內(nèi)的二進(jìn)制代碼塊(步驟120),其中用字節(jié)計(jì)算大小的選定塊對(duì)應(yīng)于與寄存器及存儲(chǔ)器地址參考相關(guān)聯(lián)的指令的大小。接著將二進(jìn)制代碼的選定塊與已知寄存器或存儲(chǔ)器位置參考的二進(jìn)制位模式比較(測(cè)試12 。如圖 3所示,此過(guò)程可構(gòu)造成循環(huán),其在正分析的整個(gè)二進(jìn)制映象中操作。在通過(guò)循環(huán)的第一遍中,在步驟120中選擇的代碼塊將為二進(jìn)制映象內(nèi)的前X個(gè)字節(jié),而在通過(guò)分析循環(huán)的后續(xù)遍中,在步驟120中選擇的代碼塊將為二進(jìn)制映象中的代碼的在前一遍中處理的X個(gè)字節(jié)之后的下一 X個(gè)字節(jié)(即,最后選擇之后的X個(gè)或X+Y個(gè)字節(jié))。如果代碼的選定塊包含寄存器或存儲(chǔ)器位置參考(即,測(cè)試122 = “是”),則選擇且正規(guī)化位的后續(xù)塊(例如,將選定位全部設(shè)定為等于零)(步驟124)。此選擇中的位的數(shù)目將取決于二進(jìn)制映象既定用于的處理器或操作系統(tǒng)中實(shí)施的地址大小。舉例來(lái)說(shuō),可選擇及正規(guī)化16、32或64個(gè)位。在一些指令中,在指令本身內(nèi)而不是在后續(xù)位中編碼寄存器值,在此情況下,選擇及正規(guī)化位的塊的步驟選擇指令內(nèi)的編碼寄存器值的那些位。一旦使選定位正規(guī)化或如果在步驟120中選擇的代碼并不對(duì)應(yīng)于寄存器或存儲(chǔ)器位置參考(即,測(cè)試122 = “否”),則可通過(guò)確定是否還有更多二進(jìn)制代碼要分析(測(cè)試 126)來(lái)繼續(xù)所述過(guò)程,且如果是的話,則返回以選擇要分析的下一代碼塊(步驟120)。一旦已如此分析了整個(gè)代碼(即,測(cè)試126 = “否”),則處理可繼續(xù)到下一步驟,例如上文參看圖1及圖2描述的步驟14。如上所述,可通過(guò)使用反編譯器應(yīng)用或眾所周知的用于識(shí)別給定處理器上的給定編譯器的函數(shù)的開(kāi)頭及結(jié)尾的技術(shù)(步驟16),或通過(guò)直接掃描正分析的二進(jìn)制映象以辨識(shí)開(kāi)始及結(jié)束函數(shù)的指令模式,來(lái)在二進(jìn)制映象內(nèi)識(shí)別函數(shù)塊(步驟14)。圖4中說(shuō)明可實(shí)施以掃描二進(jìn)制映象以尋找函數(shù)邊界的過(guò)程步驟的實(shí)例(步驟14)。由于函數(shù)且尤其是組成部分(例如,由條件指令劃界的段)可在循環(huán)內(nèi)嵌套,所以在二進(jìn)制映象內(nèi)識(shí)別函數(shù)塊的過(guò)程可包含使用循環(huán)計(jì)數(shù)器i (或追蹤二進(jìn)制映象內(nèi)的嵌套及遞歸循環(huán)的類似方法),其可在分析開(kāi)始時(shí)初始化為“0”(步驟140)。在此過(guò)程中,可選擇二進(jìn)制代碼塊(步驟142), 其中用字節(jié)計(jì)算大小的代碼塊對(duì)應(yīng)于與函數(shù)的開(kāi)頭及結(jié)尾相關(guān)聯(lián)的指令的大小。如圖4所示,此過(guò)程可構(gòu)造成循環(huán),其在正分析的整個(gè)二進(jìn)制映象中操作。在通過(guò)循環(huán)的第一遍中, 在步驟142中選擇的代碼塊將為二進(jìn)制映象內(nèi)的前X個(gè)字節(jié),而在通過(guò)分析循環(huán)的后續(xù)遍中,在步驟142中選擇的代碼塊將為二進(jìn)制映象中的代碼的在前一遍中處理的X個(gè)字節(jié)之后的下一 X個(gè)字節(jié)。接著將二進(jìn)制代碼的選定塊與模式比較,以尋找表征函數(shù)的開(kāi)頭的指令,例如循環(huán)開(kāi)始指令或分支開(kāi)始指令(測(cè)試144)。通常將通過(guò)將指令指針推送到堆棧上且分支到函數(shù)開(kāi)始指令來(lái)開(kāi)始一函數(shù)或分支。可容易辨識(shí)此些指令模式以確定函數(shù)的開(kāi)頭 (即,識(shí)別函數(shù)開(kāi)始邊界)。如果辨識(shí)出函數(shù)的開(kāi)始(即,測(cè)試144 = “是”),則將所述指令的位序列位置存儲(chǔ)于存儲(chǔ)器中,或用函數(shù)開(kāi)始標(biāo)記來(lái)標(biāo)記(步驟146)。為了適應(yīng)嵌套函數(shù),可用循環(huán)計(jì)數(shù)器值i或其它用于追蹤嵌套循環(huán)的方式來(lái)識(shí)別特定函數(shù)開(kāi)始標(biāo)記,接著將所述值遞增(步驟 148),以便可使嵌套函數(shù)的開(kāi)頭及結(jié)尾準(zhǔn)確相關(guān)??山又ㄟ^(guò)確定是否還有更多二進(jìn)制代碼要分析(測(cè)試156)來(lái)繼續(xù)處理,且如果是的話,則返回到步驟142以選擇要分析的下一代碼塊。如果選定代碼塊不包含函數(shù)的開(kāi)頭(即,測(cè)試144 = “否”),則可測(cè)試代碼塊以確定其是否包含指示函數(shù)的結(jié)尾的指令(測(cè)試150)。類似于函數(shù)或分支的開(kāi)頭,典型的函數(shù)通過(guò)將指令指針(地址序列值)從堆棧中推出且分支回到所指示的指令地址而結(jié)束??扇菀妆孀R(shí)此些指令模式以確定函數(shù)的結(jié)尾(即,識(shí)別函數(shù)的結(jié)尾邊界)。如果識(shí)別出函數(shù)的結(jié)尾(即,測(cè)試150 = “是”),則可例如通過(guò)尋找“向上”條件分支(即,其地址小于分支指令的地址的分支)將特定函數(shù)結(jié)尾標(biāo)記與特定循環(huán)相關(guān)(步驟15幻。類似地,“如果”語(yǔ)句是向下條件分支。將所述指令的位序列位置存儲(chǔ)于存儲(chǔ)器中,或用與相關(guān)聯(lián)的循環(huán)開(kāi)始語(yǔ)句相關(guān)的函數(shù)結(jié)尾標(biāo)記來(lái)標(biāo)記(步驟15幻。為了適應(yīng)嵌套函數(shù),還可使循環(huán)計(jì)數(shù)器遞增(步驟154),以便可準(zhǔn)確地追蹤函數(shù)的開(kāi)頭及結(jié)尾??山又ㄟ^(guò)確定是否還有更多二進(jìn)制代碼要分析(測(cè)試156)來(lái)繼續(xù)處理,且如果是的話,則返回到步驟142以選擇要分析的下一代碼塊。一旦已如此分析了整個(gè)二進(jìn)制映象(即,測(cè)試156 = “否”),則處理可接著繼續(xù)到分析中的下一步驟,例如上文參看圖1所述的步驟18。替代于在步驟146及152中將函數(shù)開(kāi)始及結(jié)束標(biāo)簽添加到二進(jìn)制映象,可將地址指針存儲(chǔ)于數(shù)據(jù)庫(kù)中,所述指針指示二進(jìn)制映象的位序列中或存儲(chǔ)器中含有與函數(shù)的開(kāi)頭或結(jié)尾相關(guān)聯(lián)的位的特定位置。地址指針的此數(shù)據(jù)庫(kù)可簡(jiǎn)單地為存儲(chǔ)器位置表,其可成對(duì)地存儲(chǔ)以用于指示二進(jìn)制映象內(nèi)的函數(shù)的開(kāi)頭位置及結(jié)尾位置。在后續(xù)處理中,處理器可通過(guò)開(kāi)始讀取存儲(chǔ)于函數(shù)開(kāi)始指針中的存儲(chǔ)器位置處的映象及在達(dá)到存儲(chǔ)于函數(shù)結(jié)束指針中的存儲(chǔ)器位置時(shí)停止讀取過(guò)程而使用此存儲(chǔ)器位置來(lái)選擇二進(jìn)制映象的要分析的函數(shù)塊(步驟18或19)。如上所述,可將識(shí)別出的函數(shù)單獨(dú)存儲(chǔ)于臨時(shí)數(shù)據(jù)庫(kù)(或類似數(shù)據(jù)結(jié)構(gòu))中,而不標(biāo)記二進(jìn)制映象中的函數(shù)邊界。圖5中說(shuō)明可實(shí)施以掃描二進(jìn)制映象且在數(shù)據(jù)庫(kù)中存儲(chǔ)辨識(shí)出的函數(shù)的過(guò)程步驟的實(shí)例(步驟14)。此替代過(guò)程非常類似于上文參看圖4所述的過(guò)程,區(qū)別在于,當(dāng)識(shí)別出函數(shù)結(jié)束指令(即,測(cè)試150 = “是”)時(shí),將在步驟146中辨識(shí)出的函數(shù)開(kāi)始指令與在測(cè)試150中辨識(shí)出的函數(shù)結(jié)束指令之間延伸的代碼塊作為函數(shù)代碼塊存儲(chǔ)于存儲(chǔ)器中(步驟153)??捎酶鞣N眾所周知的數(shù)據(jù)結(jié)構(gòu)來(lái)組織存儲(chǔ)函數(shù)代碼塊的數(shù)據(jù)庫(kù),且所述數(shù)據(jù)庫(kù)可包含對(duì)函數(shù)在二進(jìn)制映象中的何處開(kāi)始的指示(例如,首次在測(cè)試 144中辨識(shí)的指令的位序列位置),以便可用函數(shù)在二進(jìn)制映象中出現(xiàn)時(shí)的順序來(lái)選擇函數(shù)(例如,在步驟18或19中)。這樣做便會(huì)適應(yīng)函數(shù)彼此嵌套的情形,在此情況下,函數(shù)結(jié)束指令可用與函數(shù)開(kāi)始指令出現(xiàn)時(shí)的序列不同的序列出現(xiàn)。一旦已經(jīng)存儲(chǔ)了辨識(shí)出的函數(shù)代碼塊,可接著通過(guò)確定是否還有更多代碼要分析(測(cè)試156)來(lái)繼續(xù)處理,且如果是的話, 則返回到步驟142以選擇要分析的下一代碼塊。一旦已如此分析了整個(gè)二進(jìn)制映象(即, 測(cè)試156 = “否”),則處理可接著繼續(xù)到分析中的下一步驟,例如上文參看圖1所述的步驟 18。所屬領(lǐng)域的技術(shù)人員將了解,函數(shù)通常會(huì)調(diào)用或包含其它函數(shù)。上述實(shí)施例將適應(yīng)獨(dú)立函數(shù)、嵌套于另一函數(shù)內(nèi)的函數(shù)及函數(shù)的函數(shù)。在嵌套函數(shù)的情況下,可獲得多個(gè)函數(shù)匹配,當(dāng)包含于參考函數(shù)映象數(shù)據(jù)庫(kù)22內(nèi)的函數(shù)含有包括其它函數(shù)的函數(shù)及所述包含的函數(shù)中的一者或一者以上兩者時(shí),就會(huì)出現(xiàn)上述情況。舉例來(lái)說(shuō),如果參考函數(shù)映象數(shù)據(jù)庫(kù)22包含參考維特比解碼器函數(shù)及包含所述相同維特比解碼器函數(shù)的參考調(diào)制解調(diào)器控制函數(shù),則當(dāng)正分析的二進(jìn)制映象包含所述特定調(diào)制解調(diào)器控制函數(shù)時(shí),將確定與所述兩個(gè)參考函數(shù)的匹配。在一實(shí)施例中,可組合在圖3及圖4中說(shuō)明的步驟12及14中的操作以在單個(gè)循環(huán)中繼續(xù)。在此實(shí)施例中,分析在步驟120或142中選擇的每一代碼塊以確定其是否含有寄存器標(biāo)簽或存儲(chǔ)器地址參考(測(cè)試122),且如果否的話,則分析相同代碼塊以確定其是否含有循環(huán)開(kāi)始或分支開(kāi)始指令(測(cè)試144),或循環(huán)結(jié)束或分支返回指令(測(cè)試150)。如果任何測(cè)試結(jié)果是肯定的(即,測(cè)試122、144或150中的任一者=“是”),則實(shí)現(xiàn)相關(guān)聯(lián)的處理(即,步驟124、146、152或153中的一者),且循環(huán)通過(guò)確定是否還有剩余的更多代碼要分析(測(cè)試126、156)而繼續(xù),且如果是的話,則選擇下一代碼塊(即,重復(fù)步驟120或 142)。此實(shí)施例準(zhǔn)許在單遍中實(shí)現(xiàn)對(duì)二進(jìn)制映象的預(yù)處理。上述實(shí)施例非常適合于確定軟件構(gòu)造內(nèi)是否包含特定的函數(shù)版本,因?yàn)樗龇椒ū孀R(shí)與參考數(shù)據(jù)庫(kù)22中的函數(shù)映象完全匹配或接近完全匹配。這些實(shí)施例可能對(duì)于在發(fā)布之前確認(rèn)軟件二進(jìn)制映象的內(nèi)容或識(shí)別二進(jìn)制映象內(nèi)可能存在的已知漏洞非常有用。在其它情形或應(yīng)用中,可能需要確定任何二進(jìn)制映象是否有可能包含某些函數(shù)。 此情形的實(shí)例是當(dāng)分析軟件以確定是否已未經(jīng)授權(quán)而復(fù)制了任何函數(shù)時(shí)。在此些情形下, 尋找完全匹配可能使所述方法對(duì)于通過(guò)在函數(shù)代碼中包含無(wú)關(guān)緊要的修改而隱藏復(fù)制的行為脆弱。為了解決此些情形,可能匹配實(shí)施例方法在函數(shù)內(nèi)的組成部分的級(jí)別將正分析的二進(jìn)制映象與參考數(shù)據(jù)庫(kù)比較,以確定是否函數(shù)的若干部分與已知函數(shù)實(shí)施方案匹配。通過(guò)以較小的函數(shù)組成段來(lái)分析正分析的二進(jìn)制映象,可將類似的函數(shù)組成部分與參考數(shù)據(jù)庫(kù)中的函數(shù)內(nèi)的參考組成部分匹配,這可用來(lái)確定正分析的二進(jìn)制映象在功能方面與參考函數(shù)及已知函數(shù)實(shí)施方案相似的程度。通過(guò)以統(tǒng)計(jì)或圖形度量呈現(xiàn)匹配的組成部分信息,可能匹配實(shí)施例方法可通知用戶正分析的二進(jìn)制映象包含復(fù)制的軟件的可能性。即使結(jié)果不是絕對(duì)的,但此些可能性評(píng)估也可用于確定是否值得執(zhí)行更嚴(yán)格的分析方法,例如對(duì)二進(jìn)制映象的逐位比較或?qū)υ创a的逐行比較。因此,可使用可能匹配實(shí)施例方法作為篩選工具將二進(jìn)制映象與大量已知實(shí)施方案比較以確定是否需要進(jìn)行進(jìn)一步的調(diào)查。圖6中說(shuō)明可在可能匹配實(shí)施例方法中實(shí)施的實(shí)例過(guò)程步驟。如上文參看圖1及圖2所述,對(duì)所接收的用于分析(步驟10)的二進(jìn)制映象進(jìn)行預(yù)處理以使寄存器及存儲(chǔ)器地址參考正規(guī)化(步驟1 ,且識(shí)別函數(shù)塊(步驟14)。如上所述,此預(yù)處理可在不擾亂構(gòu)造之間將不同的寄存器及存儲(chǔ)器地址值的情況下實(shí)現(xiàn)函數(shù)及函數(shù)組成部分的比較。為了在比上述實(shí)施例提供的詳細(xì)級(jí)別更精細(xì)的級(jí)別上分析二進(jìn)制映象,所述預(yù)處理通過(guò)識(shí)別函數(shù)內(nèi)的組成部分(例如算術(shù)及類似組成塊)而繼續(xù)(步驟40)。在步驟40中可使用各種準(zhǔn)則來(lái)識(shí)別函數(shù)內(nèi)的組成部分的邊界,因此此進(jìn)一步分段不僅僅限于算術(shù)塊一圖中使用“算術(shù)塊” 只是為了說(shuō)明的目的??墒褂梅淳幾g器應(yīng)用或眾所周知的用于識(shí)別給定處理器上的給定編譯器的函數(shù)的開(kāi)頭及結(jié)尾的技術(shù)來(lái)識(shí)別函數(shù)的此些組成部分(步驟16),因?yàn)榉淳幾g器及其它技術(shù)可識(shí)別分支、條件語(yǔ)句及類似指令。另一選擇為,可用上文參看圖4及圖5所述的方式來(lái)執(zhí)行對(duì)二進(jìn)制映象的逐塊分析,以識(shí)別函數(shù)內(nèi)的重要組成部分的開(kāi)頭及結(jié)尾。舉例來(lái)說(shuō),許多函數(shù)包含條件語(yǔ)句,可基于所述條件語(yǔ)句的唯一位模式來(lái)辨識(shí)條件語(yǔ)句。還可根據(jù)分支指令辨識(shí)函數(shù)內(nèi)的組成部分,可基于組成部分的位模式或基于將指令排序器值推送到堆棧上的指令來(lái)辨識(shí)所述組成部分,其中通過(guò)將所述排序器值從堆棧中推出來(lái)指示組成部分的結(jié)尾。當(dāng)在步驟40中識(shí)別組成部分時(shí),可個(gè)別地識(shí)別組成部分,或者可將其識(shí)別為對(duì)應(yīng)于包含其的特定函數(shù)。任一方法均將奏效,且每一方法均有優(yōu)點(diǎn)及缺點(diǎn),這可使得一種方法在某些應(yīng)用或環(huán)境中更優(yōu)越。類似于上文參看圖4及圖5所述的可識(shí)別函數(shù)或?qū)⑵浯鎯?chǔ)于臨時(shí)數(shù)據(jù)庫(kù)中的方式,可例如通過(guò)以下方式來(lái)識(shí)別函數(shù)的識(shí)別出的組成部分添加到二進(jìn)制映象的開(kāi)頭及結(jié)尾標(biāo)記,存儲(chǔ)指示二進(jìn)制映象內(nèi)的開(kāi)頭及結(jié)尾位的指針,或在臨時(shí)數(shù)據(jù)庫(kù)中存儲(chǔ)識(shí)別出的組成部分代碼塊。在識(shí)別出函數(shù)及其組成部分或在數(shù)據(jù)庫(kù)中存儲(chǔ)函數(shù)及其組成部分后,可通過(guò)選擇要分析的組成部分(步驟4 來(lái)繼續(xù)處理。如圖6所示,可在循環(huán)中執(zhí)行此處理,所述循環(huán)在正分析的整個(gè)二進(jìn)制映象中操作。在通過(guò)分析循環(huán)的第一遍中,在步驟42中選擇的代碼塊將是二進(jìn)制序列內(nèi)或臨時(shí)數(shù)據(jù)庫(kù)內(nèi)的第一者,而在通過(guò)分析循環(huán)的后續(xù)遍中,在步驟42 中選擇的下一代碼塊將是二進(jìn)制序列或數(shù)據(jù)庫(kù)中的下一者。在一實(shí)施例中,可使用如上文參看圖1所述的用于測(cè)試20的逐位比較方法將代碼的選定組成部分或算術(shù)塊與存儲(chǔ)于組成部分參考數(shù)據(jù)庫(kù)46中的參考組成部分比較。然而,在給定在將二進(jìn)制映象分解成組成部分而非函數(shù)尤其是當(dāng)將每一組成部分與大型參考組成部分二進(jìn)制映象庫(kù)比較時(shí)需要進(jìn)行的大量比較的情況下,優(yōu)選實(shí)施例在步驟42中產(chǎn)生選定組成部分或算術(shù)塊的單向散列。接著可在測(cè)試44中將所述產(chǎn)生的散列與可存儲(chǔ)于組成部分散列數(shù)據(jù)庫(kù)47中的參考組成部分散列值比較。如上文參看圖2所述,可在分析之前產(chǎn)生組成部分散列值的數(shù)據(jù)庫(kù),且在用于與實(shí)施例方法一起使用的庫(kù)或數(shù)據(jù)庫(kù)中維持所述數(shù)據(jù)庫(kù)。如上所述,比較散列值涉及的處理遠(yuǎn)遠(yuǎn)少于逐位比較二進(jìn)制代碼或辨識(shí)二進(jìn)制序列中的模式,且因此使用此方法可在給定量的處理時(shí)間內(nèi)將多得多的組成部分與參考數(shù)據(jù)庫(kù)比較。如果在步驟42中產(chǎn)生的代碼的選定組成部分塊的散列值與參考組成部分散列數(shù)據(jù)庫(kù)47內(nèi)的散列值匹配(即,測(cè)試44 = “是”),則記錄所述匹配(步驟48)。依據(jù)實(shí)施方案,可單獨(dú)記錄匹配組成部分,或與包含其的函數(shù)組合記錄。換句話說(shuō),依據(jù)組成部分散列數(shù)據(jù)庫(kù)47的組織方式,所述過(guò)程可僅僅追蹤匹配的組成部分或在特定函數(shù)內(nèi)匹配的組成部分。由于可在各種不同函數(shù)中使用許多算術(shù)塊,所以二進(jìn)制映象內(nèi)的此些算術(shù)塊的匹配可能不如特定函數(shù)中的此些算術(shù)塊的匹配重要。另一方面,二進(jìn)制映象內(nèi)的任何位置處的非常唯一的算術(shù)塊的匹配可指示可能已復(fù)制了軟件的至少包含匹配的唯一算術(shù)塊的部分。 在又一實(shí)施例中,可僅記錄已檢測(cè)到匹配的事實(shí),例如用匹配計(jì)數(shù)器的形式記錄。舉例來(lái)說(shuō),可簡(jiǎn)單地通過(guò)為匹配的數(shù)目及比較的組成塊的數(shù)目計(jì)數(shù)來(lái)計(jì)算匹配組成部分的百分比 (即,與組成部分散列數(shù)據(jù)庫(kù)47內(nèi)的組成部分匹配的所有組成塊的百分比)。如果選定組成部分不與散列數(shù)據(jù)庫(kù)47中的任何散列值匹配(S卩,測(cè)試44 = “否”),或已經(jīng)記錄了檢測(cè)到的匹配(步驟48),則通過(guò)確定是否還有另一組成部分或算術(shù)塊要分析(測(cè)試50)來(lái)使過(guò)程繼續(xù),且如果是的話,則返回到步驟42以選擇代碼的下一組成部分塊,且產(chǎn)生其散列值。一旦已分析了所有組成部分(即,測(cè)試50 = “否”),則可使用記錄的匹配將匹配函數(shù)群組與已知實(shí)施方案比較(步驟52)??墒褂糜涗浀钠ヅ浣Y(jié)果來(lái)執(zhí)行各種不同分析以便得出與二進(jìn)制映象的內(nèi)容有關(guān)的結(jié)論。舉例來(lái)說(shuō),可針對(duì)整個(gè)二進(jìn)制映象產(chǎn)生匹配組成部分的直接百分比,其中提供輸出作為統(tǒng)計(jì)測(cè)量結(jié)果(步驟56)。此統(tǒng)計(jì)數(shù)據(jù)將揭示與整個(gè)二進(jìn)制映象是基于類似軟件應(yīng)用的復(fù)制的可能性有關(guān)的信息。然而,如果二進(jìn)制映象僅含有幾個(gè)復(fù)制的函數(shù),則此全局百分比統(tǒng)計(jì)數(shù)據(jù)可能并不揭示所述復(fù)制。出于所述原因,可在步驟52中比較與函數(shù)的組成部分匹配的群組以識(shí)別較大百分比的組成部分與參考數(shù)據(jù)庫(kù) 22,46內(nèi)的參考函數(shù)中的組成部分匹配的函數(shù)。如果一函數(shù)內(nèi)的較大百分比的組成部分與參考數(shù)據(jù)庫(kù)22、46中的參考函數(shù)中的組成部分匹配,則此可指示所述特定函數(shù)很可能已被復(fù)制。此還可呈現(xiàn)為展示特定函數(shù)內(nèi)的組成部分匹配的統(tǒng)計(jì)數(shù)據(jù)(步驟56)。在更詳細(xì)的分析中,可在步驟52中評(píng)估匹配組成部分在函數(shù)內(nèi)出現(xiàn)時(shí)的順序。組成過(guò)程的執(zhí)行順序通常并不影響整個(gè)函數(shù),且因此函數(shù)中與參考數(shù)據(jù)庫(kù)22、46內(nèi)的參考組成部分匹配的組成部分的數(shù)目可能足以指示復(fù)制。然而,對(duì)于一些函數(shù)來(lái)說(shuō),組成部分的執(zhí)行順序較為重要。對(duì)于此些函數(shù)來(lái)說(shuō),如果匹配的組成部分在正分析的二進(jìn)制映象內(nèi)的函數(shù)中出現(xiàn)時(shí)的順序不同于在參考數(shù)據(jù)庫(kù)22、46內(nèi)的參考函數(shù)內(nèi)出現(xiàn)時(shí)的順序,則大量匹配的組成部分可能并不指示有可能發(fā)生復(fù)制??捎米R(shí)別特定參考函數(shù)的形式及組成部分與已知實(shí)施方案匹配的方式向用戶呈現(xiàn)此信息(步驟M)。在對(duì)組成部分匹配結(jié)果的進(jìn)一步分析中,可用可揭示正分析的二進(jìn)制映象內(nèi)的特定組成部分在各種參考函數(shù)中出現(xiàn)的頻率的直方圖的形式呈現(xiàn)結(jié)果。此方法可能可用于在許多不同函數(shù)中出現(xiàn)的組成部分或用于檢測(cè)復(fù)制的整體模式。在另一實(shí)例中,特定組成部分在一函數(shù)或若干函數(shù)內(nèi)的出現(xiàn)可能對(duì)于特定實(shí)施方案來(lái)說(shuō)是唯一的,且因此其匹配可指示很有可能發(fā)生復(fù)制。可輸出此分析作為與已知實(shí)施方案的比較(步驟54)或作為統(tǒng)計(jì)匹配(步驟56)。在另一實(shí)例中,可將組成部分在正分析的二進(jìn)制映象內(nèi)出現(xiàn)時(shí)的順序或在所述二進(jìn)制映象內(nèi)的特定函數(shù)內(nèi)出現(xiàn)時(shí)的順序與已知實(shí)施方案比較。通常在層級(jí)中調(diào)用函數(shù),且因此,函數(shù)調(diào)用的層級(jí)可能對(duì)于特定函數(shù)或軟件版本來(lái)說(shuō)是唯一的。在可能存在許多匹配函數(shù)或許多匹配函數(shù)組成部分的情形下,調(diào)用組成部分或函數(shù)的序列可提供對(duì)軟件已被復(fù)制的可能性的更好感測(cè)。因此,復(fù)制的概率可能與在給定二進(jìn)制映象內(nèi)調(diào)用常用函數(shù)及組成部分的序列有關(guān)。步驟52中的這些各種分析可利用各種眾所周知的邏輯及統(tǒng)計(jì)過(guò)程(包含例如貝葉斯統(tǒng)計(jì)分析),以產(chǎn)生對(duì)復(fù)制的可能性的測(cè)量。圖7中說(shuō)明替代實(shí)施例,其包含額外預(yù)處理以便使分支地址正規(guī)化。可在已識(shí)別出函數(shù)及算法塊之后實(shí)現(xiàn)分支功能性的正規(guī)化。可通過(guò)將地址設(shè)定為零或使用零作為函數(shù)或算法塊的基地址計(jì)算相對(duì)地址來(lái)使分支地址正規(guī)化。后一種過(guò)程在一些情形下可能更加準(zhǔn)確。為了更能夠檢測(cè)以不同于參考數(shù)據(jù)庫(kù)內(nèi)的函數(shù)的組成部分的順序呈現(xiàn)的函數(shù)的組成部分,可對(duì)正分析的二進(jìn)制映象進(jìn)行進(jìn)一步預(yù)處理以使分支地址正規(guī)化(步驟41)。如上所述,可在步驟40中使用函數(shù)內(nèi)的分支來(lái)檢測(cè)算術(shù)塊及組成部分。當(dāng)檢測(cè)到此分支時(shí),可在步驟41中將此些指令中包含的分支地址設(shè)定為標(biāo)準(zhǔn)值,例如全部為零或設(shè)定為相對(duì)于函數(shù)或算法塊的零基地址而計(jì)算的相對(duì)地址,使得可無(wú)需考慮分支地址而比較所得的正規(guī)化代碼塊。除了添加用于使分支地址正規(guī)化的步驟41之外,此實(shí)施例中的步驟的處理如上文參看圖6所述繼續(xù)進(jìn)行。在圖8中說(shuō)明的又一實(shí)施例中,可將完全匹配與可能匹配實(shí)施例組合成單個(gè)過(guò)程。在此實(shí)施例中,可選擇代碼的函數(shù)塊(步驟18或19),且在測(cè)試20或21中在函數(shù)級(jí)別上將其與參考數(shù)據(jù)庫(kù)22比較。所述比較可如上文參看圖1所述基于其位模式來(lái)進(jìn)行(測(cè)試20),或者如上文參看圖2所述基于比較散列值來(lái)進(jìn)行(測(cè)試21)。如果檢測(cè)到匹配,則處理可如上文參看圖1及圖2所述繼續(xù)。然而,如果未檢測(cè)到函數(shù)匹配,則在此實(shí)施例中的過(guò)程可通過(guò)選擇所述函數(shù)內(nèi)的組成部分(例如算術(shù)塊)(步驟4 而繼續(xù)??山又鴮⑺鲞x定組成部分與參考函數(shù)組成部分的參考數(shù)據(jù)庫(kù)46比較(測(cè)試44)。如果檢測(cè)到匹配 (即,散列值相等),則可記錄所述匹配(步驟48),且通過(guò)選擇選定函數(shù)內(nèi)的下一組成部分而繼續(xù)所述過(guò)程,如果測(cè)試50指示函數(shù)內(nèi)還有更多組成部分(即,測(cè)試50 = “是”),則重復(fù)步驟42。請(qǐng)注意,如果選定函數(shù)與參考數(shù)據(jù)庫(kù)22中的參考函數(shù)匹配,則不需要執(zhí)行步驟 42-50的組成部分匹配分析。一旦已分析了函數(shù)的所有組成部分,如果還有更多函數(shù)要分析(即,測(cè)試32 = “是”),則過(guò)程返回以選擇代碼的下一函數(shù)塊,重復(fù)步驟18或19。此組合實(shí)施例中的預(yù)處理(步驟10-14及40-4 及對(duì)結(jié)果的所述呈現(xiàn)(步驟34、56)實(shí)施上文參看圖1-2及圖6-7描述的過(guò)程。此組合實(shí)施例使得能夠在對(duì)軟件二進(jìn)制映象的單次分析中檢測(cè)完全函數(shù)匹配及可能函數(shù)復(fù)制兩者。在圖8中說(shuō)明的實(shí)施例的另一替代方案中,可只有在函數(shù)不與參考函數(shù)散列數(shù)據(jù)庫(kù)M中的函數(shù)匹配(即,測(cè)試21 = “否”)的情況下才執(zhí)行識(shí)別函數(shù)內(nèi)的算術(shù)塊或組成部分的過(guò)程(步驟42)。在此替代實(shí)施例中,將就在步驟42之前執(zhí)行步驟40,且步驟40將限于步驟19中選擇的函數(shù)。否則,此實(shí)施例的處理將與上文參看圖8所述的大致相同在前面執(zhí)行。各種實(shí)施例可具有若干有用的應(yīng)用。如上所述,一種應(yīng)用是用于在發(fā)布之前篩選二進(jìn)制映象,以確認(rèn)其不包含已知漏洞或過(guò)時(shí)的軟件模塊。由于可在代碼被編譯且被轉(zhuǎn)換成可執(zhí)行二進(jìn)制映象之后實(shí)現(xiàn)此處理,所以此校驗(yàn)不依賴于軟件來(lái)源追蹤,或其它用于追蹤二進(jìn)制映象的內(nèi)容的高成本方法。另一應(yīng)用涉及使用所述方法來(lái)辨識(shí)特定函數(shù)或軟件模塊以診斷運(yùn)算問(wèn)題或確定特定二進(jìn)制映象內(nèi)的漏洞來(lái)源。另一應(yīng)用是使用所述方法來(lái)確認(rèn)二進(jìn)制映象不包含第三方編寫的函數(shù)或軟件模塊,所述第三方例如是公共資源軟件或無(wú)法提供許可證的軟件。此外,如上所述,所述方法可用于檢測(cè)對(duì)軟件或函數(shù)的未經(jīng)授權(quán)的復(fù)制。在此方面,所述方法可用作用以識(shí)別可包含可能需要對(duì)其進(jìn)行進(jìn)一步分析的復(fù)制函數(shù)的軟件的篩選工具??墒褂门c上文參看圖1及圖2所述的相同預(yù)處理步驟來(lái)產(chǎn)生已知函數(shù)映象的參考數(shù)據(jù)庫(kù)22。如圖9中說(shuō)明,可通過(guò)處理計(jì)算機(jī)來(lái)接收待添加到參考數(shù)據(jù)庫(kù)22的可執(zhí)行函數(shù)二進(jìn)制映象(步驟60),例如用有形存儲(chǔ)媒體(例如,CD、DVD或外部硬驅(qū)動(dòng)器)的形式或經(jīng)由網(wǎng)絡(luò)來(lái)接收。此接收到的函數(shù)應(yīng)采用可執(zhí)行編譯形式,類似于其可能在正分析的二進(jìn)制映象中出現(xiàn)時(shí)的形式。由于二進(jìn)制映象可能在編譯器之間不同,所以在一實(shí)施例中,可用各種編譯器品牌及編譯器版本來(lái)編譯函數(shù),以產(chǎn)生可能遇到的各種各樣的二進(jìn)制映象。接著分析每一接收到的函數(shù)二進(jìn)制映象以使用與上文參看圖1所述的步驟12中的相同方法來(lái)使寄存器及存儲(chǔ)器地址參考正規(guī)化(步驟62)。地址及寄存器被設(shè)定的正規(guī)化值應(yīng)當(dāng)與分析二進(jìn)制映象時(shí)使用的正規(guī)化值相同,例如將所有地址設(shè)定為零。如果在如上文參看圖 7所示的步驟41所述的分析中使分支地址正規(guī)化,則接收到的函數(shù)也應(yīng)當(dāng)使其分支地址正規(guī)化(任選步驟64)。如果通過(guò)比較散列值而分析二進(jìn)制映象以尋找函數(shù)內(nèi)容,則將散列算法應(yīng)用于正規(guī)化函數(shù)以產(chǎn)生其散列值(任選步驟66)。最后,將正規(guī)化代碼或散列值存儲(chǔ)于參考數(shù)據(jù)庫(kù)中(步驟68)??墒褂萌魏伪娝苤臄?shù)據(jù)結(jié)構(gòu)來(lái)構(gòu)造此參考數(shù)據(jù)庫(kù),且此參考數(shù)據(jù)庫(kù)可包含特定函數(shù)的識(shí)別符(ID),使得如果檢測(cè)到匹配,則可容易識(shí)別出匹配函數(shù)。可用類似方式產(chǎn)生函數(shù)組成部分的參考數(shù)據(jù)庫(kù)。如圖10中說(shuō)明,可用上述格式中的任一者在計(jì)算機(jī)中接收要存儲(chǔ)于參考數(shù)據(jù)庫(kù)中的函數(shù)二進(jìn)制映象(步驟70)。由于二進(jìn)制映象可能在編譯器之間不同,所以在一實(shí)施例中,可用各種編譯器品牌及編譯器版本來(lái)編譯函數(shù),以產(chǎn)生可能遇到的各種各樣的二進(jìn)制映象。接著對(duì)接收到的函數(shù)二進(jìn)制映象進(jìn)行預(yù)處理以使存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化(步驟7 ,且識(shí)別接收到的函數(shù)內(nèi)的組成部分或算術(shù)塊邊界(步驟74)。在識(shí)別出組成部分后,選擇代碼的第一組成部分塊 (步驟76)。將散列算法應(yīng)用于代碼的選定組成部分塊以產(chǎn)生其散列值(步驟78),將散列值存儲(chǔ)于組成部分散列數(shù)據(jù)庫(kù)中(步驟80)??墒褂萌魏伪娝苤臄?shù)據(jù)結(jié)構(gòu)來(lái)構(gòu)造此數(shù)據(jù)庫(kù),且此數(shù)據(jù)庫(kù)可包含特定函數(shù)及組成部分的ID,使得如果檢測(cè)到匹配,則可容易識(shí)別出匹配函數(shù)及組成部分。可通過(guò)確定函數(shù)內(nèi)是否還有另一組成部分或算術(shù)塊(測(cè)試8 來(lái)繼續(xù)所述過(guò)程,且如果是的話,則選擇代碼的下一組成部分塊以產(chǎn)生散列值供存儲(chǔ)于散列數(shù)據(jù)庫(kù)中,重復(fù)步驟76、78及80。一旦已處理了所有組成部分(即,測(cè)試82= “否”),則此函數(shù)的處理完成。雖然參考數(shù)據(jù)庫(kù)22、24、46、47可用一次一個(gè)函數(shù)的方式構(gòu)造,但也可加載整個(gè)軟件二進(jìn)制映象,在此情況下,圖9及圖10中說(shuō)明的處理將包含如上文參看圖1、圖4及圖5 所述的識(shí)別函數(shù)的步驟(步驟14)。以此方式,可針對(duì)所有軟件二進(jìn)制映象快速地產(chǎn)生庫(kù), 所述軟件二進(jìn)制映象已通過(guò)將其循序饋送到經(jīng)配置以執(zhí)行圖9及圖10中說(shuō)明的方法的計(jì)算機(jī)中來(lái)發(fā)布??赏ㄟ^(guò)在新函數(shù)被批準(zhǔn)發(fā)布時(shí)存儲(chǔ)新函數(shù)的映象來(lái)產(chǎn)生參考函數(shù)及參考函數(shù)組成部分的庫(kù)數(shù)據(jù)庫(kù)。以此方式,可隨時(shí)間積累數(shù)據(jù)庫(kù),以反映用戶公司進(jìn)行的所有軟件發(fā)布??僧a(chǎn)生各種不同的參考數(shù)據(jù)庫(kù),且使用其來(lái)支持對(duì)實(shí)施例方法的各種使用。舉例來(lái)說(shuō),一個(gè)參考數(shù)據(jù)庫(kù)可僅包含具有已知漏洞的函數(shù)的二進(jìn)制映象,其用于篩選軟件版本以確認(rèn)其不包含此些已知問(wèn)題。另一參考數(shù)據(jù)庫(kù)可包含一家公司的所有經(jīng)授權(quán)的軟件版本,用于篩選其它公司發(fā)布的軟件以檢測(cè)未經(jīng)授權(quán)的復(fù)制。另一參考數(shù)據(jù)庫(kù)可包含所有過(guò)時(shí)函數(shù)映象,用于篩選軟件版本以確認(rèn)其不包含過(guò)時(shí)的軟件模塊。上文所述的實(shí)施例還可實(shí)施于圖11中說(shuō)明的個(gè)人計(jì)算機(jī)160上。此個(gè)人計(jì)算機(jī) 160通常包含耦合到易失性存儲(chǔ)器162及例如磁盤驅(qū)動(dòng)器163等大容量非易失性存儲(chǔ)器的處理器161。計(jì)算機(jī)180還可包含耦合到處理器161的軟盤驅(qū)動(dòng)器164及⑶/DVD驅(qū)動(dòng)器 165。通常計(jì)算機(jī)160還將包含用戶輸入裝置,例如鍵盤166及顯示器137。計(jì)算機(jī)160還可包含若干連接器端口,用于接納耦合到處理器161的外部存儲(chǔ)器裝置,例如通用串行總線(USB)端口(未圖示),還包含用于將處理器161耦合到網(wǎng)絡(luò)的網(wǎng)絡(luò)連接電路(未圖示)??赏ㄟ^(guò)執(zhí)行經(jīng)配置以實(shí)施上述方法中的一者或一者以上的軟件指令的計(jì)算機(jī)處理器161來(lái)實(shí)施各種實(shí)施例。可將此些軟件指令作為單獨(dú)應(yīng)用或作為實(shí)施實(shí)施例方法的編譯的軟件而存儲(chǔ)于存儲(chǔ)器162、163中??蓪⒖紨?shù)據(jù)庫(kù)存儲(chǔ)于內(nèi)部存儲(chǔ)器162內(nèi)、硬盤存儲(chǔ)器164中、有形存儲(chǔ)媒體上或可經(jīng)由網(wǎng)絡(luò)(未圖示)接入的服務(wù)器上。此外,可將軟件指令及數(shù)據(jù)庫(kù)存儲(chǔ)于任何形式的有形處理器可讀存儲(chǔ)器上,包含隨機(jī)存取存儲(chǔ)器162、硬盤存儲(chǔ)器163、軟盤(可在軟盤驅(qū)動(dòng)器164中讀取)、壓縮光盤(可在CD驅(qū)動(dòng)器165中讀取)、 只讀存儲(chǔ)器、快閃存儲(chǔ)器、電可擦除可編程只讀存儲(chǔ)器(EEPROM)及/或插入到計(jì)算機(jī)160 中的存儲(chǔ)器模塊(未圖示),例如外部存儲(chǔ)器芯片或USB可連接外部存儲(chǔ)器(例如,“快閃驅(qū)動(dòng)器”)。所屬領(lǐng)域的技術(shù)人員將了解,結(jié)合本文所揭示的實(shí)施例而描述的各種說(shuō)明性邏輯塊、模塊、電路及算法步驟可作為電子硬件、計(jì)算機(jī)軟件或者兩者的組合來(lái)實(shí)施。為清楚說(shuō)明硬件與軟件的此可互換性,上文已大致關(guān)于其功能性而描述了各種說(shuō)明性組件、塊、模塊、電路及步驟。所述功能性是實(shí)施為硬件還是軟件取決于特定應(yīng)用及施加于整個(gè)系統(tǒng)上的設(shè)計(jì)約束。所屬領(lǐng)域的技術(shù)人員可針對(duì)每一特定應(yīng)用以不同方式來(lái)實(shí)施所描述的功能性,但所述實(shí)施決策不應(yīng)被解釋為會(huì)導(dǎo)致脫離本發(fā)明的范圍。上文所述且在圖中展示的方法的步驟的順序只是出于實(shí)例目的,因?yàn)樵诓黄x本發(fā)明及權(quán)利要求書的精神及范圍的情況下,一些步驟的順序可相對(duì)于本文中所述的順序改變。結(jié)合本文中揭示的實(shí)施例描述的方法或算法的步驟可直接以硬件、以由處理器執(zhí)行的軟件模塊或以所述兩者組合體現(xiàn)。軟件模塊可駐存于處理器可讀存儲(chǔ)器中,其可為RAM 存儲(chǔ)器、快閃存儲(chǔ)器、ROM存儲(chǔ)器、EPROM存儲(chǔ)器、EEPROM存儲(chǔ)器、寄存器、硬盤、可裝卸盤、 CD-ROM中的任一者,或此項(xiàng)技術(shù)中已知的任何其它形式的存儲(chǔ)媒體。示范性存儲(chǔ)媒體耦合到處理器,使得處理器可從存儲(chǔ)媒體讀取信息及將信息寫入到存儲(chǔ)媒體。在替代方案中,存儲(chǔ)媒體可與處理器成一體式。處理器及存儲(chǔ)媒體可駐留于ASIC中。ASIC可駐留于用戶終端或移動(dòng)裝置中。在替代方案中,處理器及存儲(chǔ)媒體可作為離散組件駐留于用戶終端或移動(dòng)裝置中。此外,在一些方面中,方法或算法的步驟及/或動(dòng)作可作為代碼及/或指令中的一者或任何組合或集合而駐存在可并入到計(jì)算機(jī)程序產(chǎn)品中的機(jī)器可讀媒體及/或計(jì)算機(jī)可讀媒體上。
提供對(duì)各種實(shí)施例的前述描述以使得所屬領(lǐng)域的任何技術(shù)人員能夠制作或使用本發(fā)明。所屬領(lǐng)域的技術(shù)人員將容易明白對(duì)這些實(shí)施例的各種修改,且在不脫離本發(fā)明的精神或范圍的情況下,本文中界定的一般原理可應(yīng)用于其它實(shí)施例。因此,本發(fā)明不希望限于本文所示的實(shí)施例,而是權(quán)利要求書應(yīng)被賦予與本文所揭示的原理及新穎特征一致的最廣范圍。
權(quán)利要求
1.一種用于分析軟件二進(jìn)制映象的方法,其包括使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化;及將所述正規(guī)化二進(jìn)制映象與參考二進(jìn)制映象比較以確定是否存在匹配。
2.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括使所述軟件二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
3.一種計(jì)算機(jī),其包括 處理器;及存儲(chǔ)器,其耦合到所述處理器,其中所述處理器配置有用以執(zhí)行包括以下的步驟的軟件指令 使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化;及將所述正規(guī)化二進(jìn)制映象與參考二進(jìn)制映象比較以確定是否存在匹配。
4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令使所述軟件二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
5.一種計(jì)算機(jī),其包括用于使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化的裝置;及用于將所述正規(guī)化二進(jìn)制映象與參考二進(jìn)制映象比較以確定是否存在匹配的裝置。
6.根據(jù)權(quán)利要求3所述的計(jì)算機(jī),其進(jìn)一步包括用于使所述軟件二進(jìn)制映象內(nèi)的分支地址正規(guī)化的比較裝置。
7.一種有形存儲(chǔ)媒體,其上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行包括以下的步驟使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化;及將所述正規(guī)化二進(jìn)制映象與參考二進(jìn)制映象比較以確定是否存在匹配。
8.根據(jù)權(quán)利要求7所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟使所述軟件二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
9.一種用于分析軟件二進(jìn)制映象的方法,其包括使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化的二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù);及將所述正規(guī)化二進(jìn)制映象內(nèi)的每一識(shí)別出的函數(shù)與參考二進(jìn)制映象比較以確定是否存在匹配。
10.根據(jù)權(quán)利要求9所述的方法,其中所述比較步驟包括將所述正規(guī)化二進(jìn)制映象中的每一識(shí)別出的函數(shù)與多個(gè)參考二進(jìn)制映象中的每一者比較以確定是否與所述多個(gè)參考二進(jìn)制映象中的任一者存在匹配。
11.根據(jù)權(quán)利要求9所述的方法,其中所述比較步驟包括 選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定一者與所述參考二進(jìn)制映象比較。
12.根據(jù)權(quán)利要求5所述的方法,其進(jìn)一步包括選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定下一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定下一者與所述參考二進(jìn)制映象比較。
13.根據(jù)權(quán)利要求9所述的方法,其中所述比較步驟包括 選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;將散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定一者以產(chǎn)生第一散列值;及將所述第一散列值與第一參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象而產(chǎn)生所述第一參考散列值。
14.根據(jù)權(quán)利要求13所述的方法,其進(jìn)一步包括選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者; 將所述散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定下一者以產(chǎn)生第二散列值;及將所述第二散列值與所述第一參考散列值比較以確定是否存在匹配。
15.根據(jù)權(quán)利要求13所述的方法,其中所述將所述第一散列值與所述第一參考散列值比較的步驟包括將所述第一散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象中的每一者而產(chǎn)生了所述多個(gè)散列值。
16.根據(jù)權(quán)利要求9所述的方法,其進(jìn)一步包括 識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分; 選擇所述識(shí)別出的組成部分中的第一者;將散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考組成部分散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
17.根據(jù)權(quán)利要求13所述的方法,其進(jìn)一步包括 識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分; 選擇所述識(shí)別出的組成部分中的第一者;將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考組成部分散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
18.根據(jù)權(quán)利要求9所述的方法,其進(jìn)一步包括使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
19.一種用于分析軟件二進(jìn)制映象的方法,其包括使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù); 識(shí)別所述識(shí)別出的函數(shù)中的每一者內(nèi)的組成部分;選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者;將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于參考函數(shù)二進(jìn)制映象的組成部分而產(chǎn)生了所述參考散列值。
20.根據(jù)權(quán)利要求19所述的方法,其中所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
21.根據(jù)權(quán)利要求19所述的方法,其進(jìn)一步包括使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
22.根據(jù)權(quán)利要求19所述的方法,其中重復(fù)所述選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者、將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值,及將所述組成部分散列值與參考散列值比較的步驟,直到所述識(shí)別出的函數(shù)中的所述選定一者的所述組成部分中的每一者的每一組成部分散列值已與所述參考散列值比較為止。
23.根據(jù)權(quán)利要求22所述的方法,其中重復(fù)所述選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的步驟,直到所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的每一者的所述組成部分中的每一者的所有組成部分散列值已與所述參考散列值比較為止。
24.根據(jù)權(quán)利要求23所述的方法,其中所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
25.根據(jù)權(quán)利要求M所述的方法,其進(jìn)一步包括提供識(shí)別與一個(gè)或一個(gè)以上參考散列值匹配的組成部分散列值的數(shù)目的輸出。
26.根據(jù)權(quán)利要求25所述的方法,其中所述輸出是與參考函數(shù)內(nèi)的組成部分匹配的組成部分的百分比。
27.根據(jù)權(quán)利要求19所述的方法,其進(jìn)一步包括提供將選定函數(shù)內(nèi)的匹配的組成部分的順序與參考函數(shù)內(nèi)的匹配的組成部分的順序比較的輸出。
28.一種計(jì)算機(jī),其包括處理器;及存儲(chǔ)器,其耦合到所述處理器,其中所述處理器配置有用以執(zhí)行包括以下的步驟的軟件指令使軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù);及將所述正規(guī)化二進(jìn)制映象中的每一識(shí)別出的函數(shù)與參考二進(jìn)制映象比較以確定是否存在匹配。
29.根據(jù)權(quán)利要求觀所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述比較步驟包括將所述正規(guī)化二進(jìn)制映象中的每一識(shí)別出的函數(shù)與多個(gè)參考二進(jìn)制映象中的每一者比較以確定是否與所述多個(gè)參考二進(jìn)制映象中的任一者存在匹配。
30.根據(jù)權(quán)利要求觀所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述比較步驟包括選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定一者與所述參考二進(jìn)制映象比較。
31.根據(jù)權(quán)利要求30所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定下一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定下一者與所述參考二進(jìn)制映象比較。
32.根據(jù)權(quán)利要求觀所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述比較步驟包括選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者; 將散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定一者以產(chǎn)生第一散列值;及將所述第一散列值與第一參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象而產(chǎn)生了所述第一參考散列值。
33.根據(jù)權(quán)利要求32所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者; 將所述散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定下一者以產(chǎn)生第二散列值;及將所述第二散列值與所述第一參考散列值比較以確定是否存在匹配。
34.根據(jù)權(quán)利要求32所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述將所述第一散列值與參考散列值比較的步驟包括將所述第一散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象中的每一者而產(chǎn)生了所述多個(gè)散列值。
35.根據(jù)權(quán)利要求觀所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分; 選擇所述識(shí)別出的組成部分中的第一者;將散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
36.根據(jù)權(quán)利要求32所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分; 選擇所述識(shí)別出的組成部分中的第一者;將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與第二參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
37.根據(jù)權(quán)利要求觀所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
38.一種計(jì)算機(jī),其包括 處理器;及存儲(chǔ)器,其耦合到所述處理器,其中所述處理器配置有用以執(zhí)行包括以下的步驟的軟件指令 使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù); 識(shí)別所述識(shí)別出的函數(shù)中的每一者內(nèi)的組成部分; 選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者; 選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者; 將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于參考函數(shù)二進(jìn)制映象的組成部分而產(chǎn)生了所述參考散列值。
39.根據(jù)權(quán)利要求38所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
40.根據(jù)權(quán)利要求38所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
41.根據(jù)權(quán)利要求38所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得重復(fù)所述選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者、將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值,及將所述組成部分散列值與參考散列值比較的步驟,直到所述識(shí)別出的函數(shù)中的所述選定一者的所述組成部分中的每一者的每一組成部分散列值已與所述參考散列值比較為止。
42.根據(jù)權(quán)利要求41所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得重復(fù)所述選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的步驟,直到所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的每一者的所述組成部分中的每一者的所有組成部分散列值已與所述參考散列值比較為止。
43.根據(jù)權(quán)利要求42所述的計(jì)算機(jī),其中所述處理器配置有軟件指令,使得所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
44.根據(jù)權(quán)利要求43所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令提供識(shí)別與一個(gè)或一個(gè)以上參考散列值匹配的組成部分散列值的數(shù)目的輸出。
45.根據(jù)權(quán)利要求44所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行步驟使得所述輸出是與參考函數(shù)內(nèi)的組成部分匹配的組成部分的百分比的軟件指令。
46.根據(jù)權(quán)利要求38所述的計(jì)算機(jī),其中所述處理器配置有用以執(zhí)行進(jìn)一步包括以下的步驟的軟件指令提供將選定函數(shù)內(nèi)的匹配的組成部分的順序與參考函數(shù)內(nèi)的匹配的組成部分的順序比較的輸出。
47.一種計(jì)算機(jī),其包括用于使軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象的裝置;用于識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù)的裝置;及用于將所述正規(guī)化二進(jìn)制映象內(nèi)的每一識(shí)別出的函數(shù)與參考二進(jìn)制映象比較以確定是否存在匹配的裝置。
48.根據(jù)權(quán)利要求47所述的計(jì)算機(jī),其中所述用于比較的裝置包括用于將所述正規(guī)化二進(jìn)制映象中的每一識(shí)別出的函數(shù)與多個(gè)參考二進(jìn)制映象中的每一者比較以確定是否與所述多個(gè)參考二進(jìn)制映象中的任一者存在匹配的裝置。
49.根據(jù)權(quán)利要求47所述的計(jì)算機(jī),其中所述用于比較的裝置包括用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的裝置;及用于通過(guò)將所述識(shí)別出的函數(shù)中的所述選定一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定一者與所述參考二進(jìn)制映象比較的裝置。
50.根據(jù)權(quán)利要求49所述的計(jì)算機(jī),其進(jìn)一步包括用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者的裝置;及用于通過(guò)將所述識(shí)別出的函數(shù)中的所述選定下一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定下一者與所述參考二進(jìn)制映象比較的裝置。
51.根據(jù)權(quán)利要求47所述的計(jì)算機(jī),其中所述用于比較的裝置包括用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的裝置;用于將散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定一者以產(chǎn)生第一散列值的裝置;及用于將所述第一散列值與第一參考散列值比較以確定是否存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象而產(chǎn)生了所述第一參考散列值。
52.根據(jù)權(quán)利要求51所述的計(jì)算機(jī),其進(jìn)一步包括用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者的裝置;用于將所述散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定下一者以產(chǎn)生第二散列值的裝置;及用于將所述第二散列值與所述第一參考散列值比較以確定是否存在匹配的裝置。
53.根據(jù)權(quán)利要求51所述的計(jì)算機(jī),其中所述用于將所述第一散列值與參考散列值比較的裝置包括用于將所述第一散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象中的每一者而產(chǎn)生了所述多個(gè)散列值。
54.根據(jù)權(quán)利要求47所述的計(jì)算機(jī),其進(jìn)一步包括用于識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分的裝置; 用于選擇所述識(shí)別出的組成部分中的第一者的裝置;用于將散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值的裝置;及用于將所述組成部分散列值與參考散列值比較以確定是否存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
55.根據(jù)權(quán)利要求51所述的計(jì)算機(jī),其進(jìn)一步包括用于識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分的裝置; 用于選擇所述識(shí)別出的組成部分中的第一者的裝置;用于將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值的裝置;及用于將所述組成部分散列值與第二參考散列值比較以確定是否存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
56.根據(jù)權(quán)利要求47所述的計(jì)算機(jī),其進(jìn)一步包括用于使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化的裝置。
57.一種計(jì)算機(jī),其包括用于使軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象的裝置;用于識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù)的裝置; 用于識(shí)別所述識(shí)別出的函數(shù)中的每一者內(nèi)的組成部分的裝置; 用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的裝置; 用于選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者的裝置;用于將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值的裝置;及用于將所述組成部分散列值與參考散列值比較以確定是否存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于參考函數(shù)二進(jìn)制映象的組成部分而產(chǎn)生了所述參考散列值。
58.根據(jù)權(quán)利要求57所述的計(jì)算機(jī),其中所述用于將所述產(chǎn)生的散列值與參考散列值比較的裝置包括用于將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
59.根據(jù)權(quán)利要求57所述的計(jì)算機(jī),其進(jìn)一步包括用于使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化的裝置。
60.根據(jù)權(quán)利要求57所述的計(jì)算機(jī),其進(jìn)一步包括用于重復(fù)地實(shí)施以下裝置直到所述識(shí)別出的函數(shù)中的所述選定一者的所述組成部分中的每一者的每一組成部分散列值已與所述參考散列值比較為止的裝置所述用于選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者的裝置、用于將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值的裝置,及用于將所述組成部分散列值與參考散列值比較的裝置。
61.根據(jù)權(quán)利要求60所述的計(jì)算機(jī),其進(jìn)一步包括用于重復(fù)地實(shí)施以下裝置直到所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的每一者的所述組成部分中的每一者的所有組成部分散列值已與所述參考散列值比較為止的裝置所述用于選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者的裝置。
62.根據(jù)權(quán)利要求61所述的計(jì)算機(jī),其中所述用于將所述組成部分散列值與參考散列值比較的裝置包括用于將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的裝置,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
63.根據(jù)權(quán)利要求62所述的計(jì)算機(jī),其進(jìn)一步包括用于提供識(shí)別與一個(gè)或一個(gè)以上參考散列值匹配的組成部分散列值的數(shù)目的輸出的裝置。
64.根據(jù)權(quán)利要求63所述的計(jì)算機(jī),其進(jìn)一步包括用于輸出與參考函數(shù)內(nèi)的組成部分匹配的參考部分的百分比的裝置。
65.根據(jù)權(quán)利要求57所述的計(jì)算機(jī),其進(jìn)一步包括用于提供將選定函數(shù)內(nèi)的匹配的組成部分的順序與參考函數(shù)內(nèi)的匹配的組成部分的順序比較的輸出的裝置。
66.一種有形存儲(chǔ)媒體,其上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行包括以下的步驟使軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù);及將所述正規(guī)化二進(jìn)制映象內(nèi)的每一識(shí)別出的函數(shù)與參考二進(jìn)制映象比較以確定是否存在匹配。
67.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述比較步驟包括將所述正規(guī)化二進(jìn)制映象中的每一識(shí)別出的函數(shù)與多個(gè)參考二進(jìn)制映象中的每一者比較以確定是否與所述多個(gè)參考二進(jìn)制映象中的任一者存在匹配的步驟。
68.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述比較步驟包括以下操作的步驟選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定一者與所述參考二進(jìn)制映象比較。
69.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者;及通過(guò)將所述識(shí)別出的函數(shù)中的所述選定下一者中的位模式與所述參考二進(jìn)制映象中的位模式比較以確定是否存在匹配而將所述識(shí)別出的函數(shù)中的所述選定下一者與所述參考二進(jìn)制映象比較。
70.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述比較步驟包括以下操作的步驟選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者;將散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定一者以產(chǎn)生第一散列值;及將所述第一散列值與第一參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象而產(chǎn)生了所述第一參考散列值。
71.根據(jù)權(quán)利要求70所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的下一者;將所述散列算法應(yīng)用于所述識(shí)別出的函數(shù)中的所述選定下一者以產(chǎn)生第二散列值;及將所述第二散列值與所述第一參考散列值比較以確定是否存在匹配。
72.根據(jù)權(quán)利要求70所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述將所述第一散列值與參考散列值比較的步驟包括將所述第一散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的步驟,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象中的每一者而產(chǎn)生了所述多個(gè)散列值。
73.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分;選擇所述識(shí)別出的組成部分中的第一者;將散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
74.根據(jù)權(quán)利要求70所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟識(shí)別所述識(shí)別出的函數(shù)中的至少一者內(nèi)的組成部分; 選擇所述識(shí)別出的組成部分中的第一者;將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定第一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與第二參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于所述參考二進(jìn)制映象的組成部分而產(chǎn)生了所述參考組成部分散列值。
75.根據(jù)權(quán)利要求66所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
76.一種有形存儲(chǔ)媒體,其上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行包括以下的步驟處理器;及存儲(chǔ)器,其耦合到所述處理器,其中所述處理器配置有用以執(zhí)行包括以下的步驟的軟件指令 使所述軟件二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化以產(chǎn)生正規(guī)化二進(jìn)制映象;識(shí)別所述正規(guī)化二進(jìn)制映象內(nèi)的函數(shù); 識(shí)別所述識(shí)別出的函數(shù)中的每一者內(nèi)的組成部分; 選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者; 選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者; 將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值;及將所述組成部分散列值與參考散列值比較以確定是否存在匹配,其中通過(guò)將所述散列算法應(yīng)用于參考函數(shù)二進(jìn)制映象的組成部分而產(chǎn)生了所述參考散列值。
77.根據(jù)權(quán)利要求76所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的步驟,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值。
78.根據(jù)權(quán)利要求76所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟使所述正規(guī)化二進(jìn)制映象內(nèi)的分支地址正規(guī)化。
79.根據(jù)權(quán)利要求76所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得重復(fù)以下步驟直到所述識(shí)別出的函數(shù)中的所述選定一者的所述組成部分中的每一者的每一組成部分散列值已與所述參考散列值比較為止的步驟選擇所述識(shí)別出的函數(shù)中的所述選定一者內(nèi)的所述識(shí)別出的組成部分中的一者、將所述散列算法應(yīng)用于所述識(shí)別出的組成部分中的所述選定一者以產(chǎn)生組成部分散列值,及將所述組成部分散列值與參考散列值比較。1
80.根據(jù)權(quán)利要求79所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得重復(fù)以下步驟直到所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的每一者的所述組成部分中的每一者的所有組成部分散列值已與所述參考散列值比較為止的步驟選擇所述正規(guī)化二進(jìn)制映象內(nèi)的所述識(shí)別出的函數(shù)中的一者。
81.根據(jù)權(quán)利要求80所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述將所述組成部分散列值與參考散列值比較的步驟包括將所述組成部分散列值與多個(gè)參考散列值中的每一者比較以確定是否與所述多個(gè)參考散列值中的任一者存在匹配的步驟,其中通過(guò)將所述散列算法應(yīng)用于多個(gè)參考二進(jìn)制映象的每一組成部分而產(chǎn)生了所述多個(gè)參考散列值以確定是否存在匹配。
82.根據(jù)權(quán)利要求81所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟提供識(shí)別與一個(gè)或一個(gè)以上參考散列值匹配的組成部分散列值的數(shù)目的輸出。
83.根據(jù)權(quán)利要求82所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行使得所述輸出是與參考函數(shù)內(nèi)的組成部分匹配的組成部分的百分比的步驟。
84.根據(jù)權(quán)利要求76所述的有形存儲(chǔ)媒體,其中所述有形存儲(chǔ)媒體上存儲(chǔ)有處理器可執(zhí)行軟件指令,所述處理器可執(zhí)行軟件指令經(jīng)配置以使計(jì)算機(jī)的處理器執(zhí)行進(jìn)一步包括以下的步驟提供將選定函數(shù)內(nèi)的匹配的組成部分的順序與參考函數(shù)內(nèi)的匹配的組成部分的順序比較的輸出。
全文摘要
本發(fā)明提供使得能夠識(shí)別軟件二進(jìn)制映象內(nèi)的特定軟件函數(shù)、模塊或算術(shù)塊的方法及計(jì)算裝置。使所述二進(jìn)制映象內(nèi)的存儲(chǔ)器寄存器及存儲(chǔ)器地址參考正規(guī)化。識(shí)別所述二進(jìn)制映象內(nèi)的函數(shù)。將所述二進(jìn)制映象內(nèi)的每一函數(shù)與一個(gè)或一個(gè)以上參考函數(shù)二進(jìn)制映象比較,以確定是否存在匹配??赏ㄟ^(guò)比較位模式或通過(guò)比較通過(guò)將散列函數(shù)應(yīng)用于選定函數(shù)及所述參考函數(shù)產(chǎn)生的散列值來(lái)實(shí)現(xiàn)函數(shù)與參考函數(shù)的比較??勺R(shí)別所述二進(jìn)制映象中的函數(shù)內(nèi)的組成部分,且將其與參考函數(shù)內(nèi)或參考函數(shù)組成部分的數(shù)據(jù)庫(kù)內(nèi)的參考函數(shù)組成部分比較??墒褂盟霰容^的結(jié)果來(lái)確定所述軟件二進(jìn)制映象與參考函數(shù)及/或組成部分匹配的程度。
文檔編號(hào)G06F11/36GK102414668SQ201080018602
公開(kāi)日2012年4月11日 申請(qǐng)日期2010年4月28日 優(yōu)先權(quán)日2009年4月28日
發(fā)明者理查德·阿蘭·斯圖爾特 申請(qǐng)人:高通股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
志丹县| 福海县| 永州市| 海丰县| 高唐县| 江源县| 齐河县| 河间市| 许昌县| 清涧县| 木兰县| 漯河市| 丰城市| 永嘉县| 孟津县| 长治县| 榆树市| 葫芦岛市| 大关县| 淅川县| 吴桥县| 长岭县| 阿坝县| 泽库县| 莎车县| 吕梁市| 襄城县| 华安县| 尼木县| 博乐市| 伊春市| 福建省| 荣成市| 贵德县| 中山市| 兴业县| 彭水| 新河县| 仁化县| 乐亭县| 闵行区|