本發(fā)明涉及反編譯數(shù)據(jù)領(lǐng)域,具體而言,涉及一種反編譯數(shù)據(jù)的處理方法和裝置。
背景技術(shù):
::android程序運(yùn)行在dalvik虛擬機(jī)中,由dalvik虛擬機(jī)解釋執(zhí)行android程序的dalvik指令,dalvik指令經(jīng)過(guò)反編譯輸出方便人閱讀的smali指令。對(duì)android程序進(jìn)行執(zhí)行流追蹤,一般分為兩類:靜態(tài)追蹤和動(dòng)態(tài)追蹤。動(dòng)態(tài)追蹤即運(yùn)行時(shí)追蹤,存在執(zhí)行分支覆蓋不全的缺點(diǎn);靜態(tài)追蹤分支覆蓋全,但是,涉及程序的切片技術(shù)和函數(shù)調(diào)用鏈追蹤技術(shù)。現(xiàn)有的靜態(tài)追蹤技術(shù)中會(huì)把切片后的基本塊以指針形式串接起來(lái)表達(dá)函數(shù)調(diào)用鏈關(guān)系?,F(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,雖然,能解決從某個(gè)函數(shù)出發(fā)正向深度遞歸遍歷某個(gè)分支執(zhí)行流,但是,對(duì)于定位執(zhí)行入口,全分支覆蓋執(zhí)行,反向追蹤執(zhí)行方面加重了程序設(shè)計(jì)、編碼的難度,使程序不易理解,降低了程序穩(wěn)定性、可擴(kuò)展性和靈活性。針對(duì)現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題,目前尚未提出有效的解決方案。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種反編譯數(shù)據(jù)的處理方法和裝置,以至少解決現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題。根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種反編譯數(shù)據(jù)的處理方法,包括:創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組;在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息;獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系;將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至第一維數(shù) 組中、第二維數(shù)組中和第三維數(shù)組中。根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種反編譯數(shù)據(jù)的處理裝置,包括:創(chuàng)建模塊,用于創(chuàng)建三維數(shù)組模型,裝置三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組;第一獲取模塊,用于在將應(yīng)用程序反編譯為反編譯程序之后,遍歷裝置反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,裝置方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息;第二獲取模塊,用于獲取裝置每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及裝置每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系;記錄模塊,用于將裝置每個(gè)方法的裝置標(biāo)識(shí)信息、對(duì)應(yīng)的裝置多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至裝置第一維數(shù)組中、裝置第二維數(shù)組中和裝置第三維數(shù)組中。在本發(fā)明實(shí)施例中,可以在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系,并將每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系記錄至創(chuàng)建好的三維數(shù)組模型。容易注意到,由于可以通過(guò)將遍歷反編譯程序獲取到每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系全部記錄到創(chuàng)建的三維數(shù)組模型中,實(shí)現(xiàn)根據(jù)方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象的目的,因此,通過(guò)本申請(qǐng)實(shí)施例所提供的方案,可以根據(jù)需要的方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象,然后對(duì)所有向量采用深度優(yōu)先遞歸遍歷,完成全分支覆蓋。由此,本發(fā)明提供的上述方案解決了現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題。附圖說(shuō)明此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本申請(qǐng)實(shí)施例的一種反編譯數(shù)據(jù)的處理方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖;圖2是根據(jù)本申請(qǐng)實(shí)施例一的一種反編譯數(shù)據(jù)的處理方法的流程圖;圖3是根據(jù)本申請(qǐng)實(shí)施例的可選的三維坐標(biāo)系下多維向量映射的示意圖;圖4是根據(jù)本申請(qǐng)實(shí)施例的一種可選的反編譯數(shù)據(jù)的處理方法的流程圖;圖5是根據(jù)本申請(qǐng)實(shí)施例二的一種反編譯數(shù)據(jù)的處理裝置的示意圖;圖6是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖7是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖8是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖9是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖10是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖11是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;圖12是根據(jù)本申請(qǐng)實(shí)施例二的一種可選的反編譯數(shù)據(jù)的處理裝置的示意圖;以及圖13是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。具體實(shí)施方式為了使本
技術(shù)領(lǐng)域:
:的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。首先,在對(duì)本申請(qǐng)實(shí)施例進(jìn)行描述的過(guò)程中出現(xiàn)的部分名詞或術(shù)語(yǔ)適用于如下解釋:dalvik虛擬機(jī):是google公司等廠商合作開(kāi)發(fā)的android移動(dòng)設(shè)備平臺(tái)的核心組成部分之一,可以支持已轉(zhuǎn)換為.dex(即dalvikexecutable)格式的java應(yīng)用程序的運(yùn)行,.dex格式是專門為dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。smali:是dalvik虛擬機(jī)所使用的一種.dex格式文件的匯編器。實(shí)施例1根據(jù)本發(fā)明實(shí)施例,還提供了一種反編譯數(shù)據(jù)的處理方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。本申請(qǐng)實(shí)施例一所提供的方法實(shí)施例可以在移動(dòng)終端、計(jì)算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計(jì)算機(jī)終端上為例,圖1是本申請(qǐng)實(shí)施例的一種反編譯數(shù)據(jù)的處理方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖。如圖1所示,計(jì)算機(jī)終端10可以包括一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器104、以及用于通信功能的傳輸模塊106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。存儲(chǔ)器104可用于存儲(chǔ)應(yīng)用軟件的軟件程序以及模塊,如本發(fā)明實(shí)施例中的反編譯數(shù)據(jù)的處理方法對(duì)應(yīng)的程序指令/模塊,處理器102通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的反編譯數(shù)據(jù)的處理方法。存儲(chǔ)器104可包括高速隨機(jī)存儲(chǔ)器,還可包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器104可進(jìn)一步包括相對(duì)于處理器102遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至計(jì)算機(jī)終端10。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。傳輸裝置106用于經(jīng)由一個(gè)網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實(shí)例可包括計(jì)算機(jī)終端10的通信供應(yīng)商提供的無(wú)線網(wǎng)絡(luò)。在一個(gè)實(shí)例中,傳輸裝置106包括一個(gè)網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過(guò)基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過(guò)無(wú)線方式與互聯(lián)網(wǎng)進(jìn)行通訊。在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝巳鐖D2所示的反編譯數(shù)據(jù)的處理方法。圖2是根據(jù)本申請(qǐng)實(shí)施例一的一種反編譯數(shù)據(jù)的處理方法的流程圖,如圖2所示,該方法包括:步驟s21,創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和 第三維數(shù)組。在一種可選的方案中,上述三維數(shù)組模型可以采用三維坐標(biāo)系模型來(lái)進(jìn)行表示,上述第一維數(shù)組、第二維數(shù)組和第三維數(shù)組可以采用三維坐標(biāo)系模型中的坐標(biāo)軸來(lái)進(jìn)行描述,其中,第一維數(shù)組可以是x軸,第二維數(shù)組可以是y軸,第三維數(shù)據(jù)可以是z軸,創(chuàng)建三維數(shù)組模型可以是初始化三維坐標(biāo)系模型,使x,y,z軸為空,其中x,y,z軸都是順序結(jié)構(gòu),z軸隊(duì)列的每個(gè)元素也是順序結(jié)構(gòu)用以保存多個(gè)調(diào)用者的向量,x和y軸隊(duì)列的元素分別保存字符串對(duì)象和向量對(duì)象。步驟s23,在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息。步驟s25,獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系。步驟s27,將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至第一維數(shù)組中、第二維數(shù)組中和第三維數(shù)組中。在一種可選的方案中,可以通過(guò)三維坐標(biāo)系模型管理模塊和分支執(zhí)行追蹤模塊執(zhí)行上述步驟,其中,三維坐標(biāo)系模型管理模塊(記為c),主要負(fù)責(zé)完成將登記過(guò)的多維向量映射到三維坐標(biāo)系中,如圖3所示,多維向量ds和dt在三維坐標(biāo)系中分別獲得了各自的坐標(biāo)(m,m,m)和(n,n,n)。分支執(zhí)行追蹤模塊(記為t),主要負(fù)責(zé)從某個(gè)執(zhí)行入口正向或反向追蹤程序的執(zhí)行流。本申請(qǐng)上述實(shí)施例一公開(kāi)的方案中,可以在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系,并將每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系記錄至創(chuàng)建好的三維數(shù)組模型。容易注意到,由于可以通過(guò)將遍歷反編譯程序獲取到每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系全部記錄到創(chuàng)建的三維數(shù)組模型中,實(shí)現(xiàn)根據(jù)方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象的目的,因此,通過(guò)本申請(qǐng)實(shí)施例所提供的方案,可以根據(jù)需要的方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象,然后對(duì)所有向量采用深度優(yōu)先遞歸遍歷,完成全分支覆蓋。由此,本申請(qǐng)?zhí)峁┑纳鲜鰧?shí)施例一的方案解決了現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,任意一個(gè)方法在第一維數(shù)組、第二維數(shù)組和第三維數(shù)組中對(duì)應(yīng)的記錄位置具有相同的位置坐標(biāo)。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s27,將每個(gè)方法的標(biāo)識(shí)信息記錄至第一維數(shù)組,包括:步驟s271,將每個(gè)方法的標(biāo)識(shí)信息以隊(duì)列形式的順序結(jié)構(gòu)映射至第一維數(shù)組中,并記錄每個(gè)方法的標(biāo)識(shí)信息在第一維數(shù)組的隊(duì)列中的記錄位置。在一種可選的方案中,可以將獲取到的每個(gè)方法的標(biāo)識(shí)信息(即切片的方法的類名和方法簽名)映射到步驟s21中初始化的三維坐標(biāo)系的x軸上,即放入x軸隊(duì)列中,其在x軸隊(duì)列中的位置記為m,并將步驟s25中的多維向量ds映射到y(tǒng)軸上,即放入y軸隊(duì)列中的m位置上。如果已經(jīng)映射過(guò)了無(wú)需映射。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s27,將每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象記錄至第二維數(shù)組,包括:步驟s273,將每個(gè)方法所對(duì)應(yīng)的多維向量對(duì)象以隊(duì)列形式的順序結(jié)構(gòu)映射至第二維數(shù)組中,并記錄每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象在第二維數(shù)組的隊(duì)列中的記錄位置。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s25,獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,包括:步驟s251,在遍歷得到反編譯程序所包含的多個(gè)方法之后,將每個(gè)方法進(jìn)行切片和分支剝離處理,得到每個(gè)方法所包含的多個(gè)執(zhí)行分支,執(zhí)行分支由反編譯得到的程序基本塊構(gòu)成。具體地,上述程序基本塊可以是smali指令基本塊,可以根據(jù)分支跳轉(zhuǎn)偏移,將步驟s25中獲取到的每個(gè)方法切片后所得的smali指令基本塊組建成分支執(zhí)行序列(bc1,bc2,…,bcn),每個(gè)執(zhí)行分支bcx(即bc1,bc2,…,bcn中的任意一個(gè))都是一個(gè)基本塊序列(b1,b2,…,bn),而每個(gè)基本塊bx(即b1,b2,…,bn中的任意一個(gè))都是由smali指令構(gòu)成。在一種可選的方案中,可以通過(guò)程序切片和分支剝離模塊執(zhí)行上述步驟,其中,程序切片和分支剝離模塊(記為b),主要負(fù)責(zé)對(duì)android程序反編譯成smali程序,并對(duì)smali程序按方法逐個(gè)進(jìn)行切片和分支剝離,最終,形成以切片后的smali指令基本塊構(gòu)成的多個(gè)執(zhí)行分支,如圖3所示的多維向量ds和dt的各自執(zhí)行分支bc1和bc2。步驟s253,將每個(gè)方法所包含的執(zhí)行分支映射到多維向量中,建立每個(gè)方法的執(zhí)行分支序列所對(duì)應(yīng)的多維向量對(duì)象,其中,方法中包含的執(zhí)行分支在對(duì)應(yīng)的多維向量 對(duì)象中存在一個(gè)分支向量。具體地,針對(duì)上述步驟s251得出的分支執(zhí)行序列(bc1,bc2,…,bcn)建立對(duì)應(yīng)的多維向量ds對(duì)象。在一種可選的方案中,可以通過(guò)向量模型管理模塊執(zhí)行上述步驟,其中,向量模型管理模塊(記為v),主要負(fù)責(zé)將b模塊完成的每個(gè)方法的所有執(zhí)行分支映射到多維向量中,程序中的每個(gè)方法對(duì)應(yīng)一個(gè)多維向量,每個(gè)方法的每個(gè)分支對(duì)應(yīng)一個(gè)多維向量中的某一維,如圖1中ds和dt分別與bc1和bc2之間的關(guān)系。每完成一個(gè)多維向量的創(chuàng)建就會(huì)在三維坐標(biāo)系管理模塊中登記該向量。根據(jù)本申請(qǐng)上述實(shí)施例,獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系,包括:步驟s255,循環(huán)遍歷第二維數(shù)組中的多維向量對(duì)象,在第二維數(shù)組中確定任意一個(gè)方法的第一多維向量對(duì)象之后,使用回溯處理方法確定與第一多維向量對(duì)象具有函數(shù)調(diào)用鏈關(guān)系的第二多維向量對(duì)象,得到每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s255,在第二維數(shù)組中確定任意一個(gè)方法的第一多維向量對(duì)象之后,使用回溯處理方法確定與第一多維向量對(duì)象具有函數(shù)調(diào)用關(guān)系的第二多維向量對(duì)象,得到每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系的步驟包括:步驟s2551,獲取第二維數(shù)組中記錄在第一記錄位置的第一多維向量對(duì)象。步驟s2552,遍歷第一多維向量對(duì)象所包含的多個(gè)分支向量,得到每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含的程序基本塊,其中,程序基本塊由反編譯得到的程序指令構(gòu)成。步驟s2553,如果分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令所調(diào)用的被調(diào)函數(shù)的標(biāo)識(shí)信息。步驟s2554,根據(jù)被調(diào)函數(shù)的標(biāo)識(shí)信息,在第一維數(shù)組中查詢是否存在與被調(diào)函數(shù)的標(biāo)識(shí)信息相同的方法,獲取標(biāo)識(shí)信息相同的第一類方法。步驟s2555,獲取第一類方法在第一維數(shù)組中的第一記錄位置。步驟s2556,在第二維數(shù)組中查詢與第一記錄位置的坐標(biāo)值相同的第二記錄位置,并獲取記錄在第二記錄位置的第二多維向量對(duì)象,其中,第二多維向量對(duì)象為被第一多維向量對(duì)象調(diào)用的向量對(duì)象。步驟s2557,將第一多維向量對(duì)象和第二多維向量對(duì)象之間的函數(shù)調(diào)用關(guān)系記錄 在第三維數(shù)組中的對(duì)應(yīng)位置,第三維數(shù)組中的對(duì)應(yīng)位置與第二維數(shù)組中的第一記錄位置相同。在一種可選的方案中,循環(huán)遍歷多維向量ds中的每個(gè)分支向量對(duì)應(yīng)的執(zhí)行分支bcx,遍歷分支中的smali指令,如果存在調(diào)用函數(shù)指令,則取出該函數(shù)的類名和方法名信息記為xn,然后,查找x軸是否存在xn的坐標(biāo)n,如果存在該點(diǎn),則通過(guò)與該點(diǎn)對(duì)應(yīng)的y軸上的n坐標(biāo)處取出被調(diào)用向量dt,并將向量ds放入向量dt所對(duì)應(yīng)的z軸n處的隊(duì)列中,這樣就建立了一個(gè)向量ds指向向量dt的關(guān)系,即建立了一個(gè)函數(shù)調(diào)用鏈關(guān)系。根據(jù)本申請(qǐng)上述實(shí)施例,在第一維數(shù)組中未查詢到標(biāo)識(shí)信息相同的方法的情況下,在第二維數(shù)組中建立一個(gè)空向量,并將調(diào)用函數(shù)指令所調(diào)用的函數(shù)的標(biāo)識(shí)信息映射到第一維數(shù)組中的對(duì)應(yīng)位置。在一種可選的方案中,如果xn在x軸上不存在,則建立一個(gè)空向量dt映射到y(tǒng)軸坐標(biāo)上,同時(shí)將xn映射到x軸上n坐標(biāo)處。根據(jù)本申請(qǐng)上述實(shí)施例,在步驟s23,遍歷反編譯程序所包含的多個(gè)方法之后,上述方法還包括:步驟s231,如果反編譯程序中所包含的多個(gè)方法被遍歷完全,則啟動(dòng)追蹤處理流程。步驟s233,接收待追蹤的方法的標(biāo)識(shí)信息,并根據(jù)待追蹤的方法的標(biāo)識(shí)信息確定待追蹤的多維向量對(duì)象。步驟s235,基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤或反向追蹤反編譯程序。在一種可選的方案中,在追蹤某一向量的過(guò)程中,遇到調(diào)用函數(shù)情形,只需要在三維坐標(biāo)系查找z軸映射關(guān)系就可以定位到下一個(gè)執(zhí)行入口函數(shù),進(jìn)去之后繼續(xù)深度優(yōu)先遍歷;而反向追蹤執(zhí)行流程也類似,定位入口之后從向量尾部反向追蹤,到達(dá)向量頂點(diǎn)則查找z軸,找到后通過(guò)三維坐標(biāo)系定位到調(diào)用者的向量繼續(xù)反向追蹤過(guò)程。本申請(qǐng)通過(guò)三維坐標(biāo)系和多維向量模型,在定位執(zhí)行入口,正向或反向追蹤程序執(zhí)行流方面加快了遍歷和查找速度,健全了分支覆蓋,使程序編碼更清晰、簡(jiǎn)單、穩(wěn)定和易于維護(hù)。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s235,基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤反編譯程序,包括:步驟s2351,獲取待追蹤的多維向量對(duì)象在第二維數(shù)組中的第三記錄位置,以及 待追蹤的多維向量對(duì)象所包含的分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊。步驟s2353,基于執(zhí)行分支的尾部程序基本塊進(jìn)行反向追蹤,在追蹤到執(zhí)行分支的頭部程序基本塊時(shí),從第三維數(shù)組中獲取與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象。步驟s2355,在將與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象作為執(zhí)行入口之后,執(zhí)行后續(xù)的深度優(yōu)先遍歷來(lái)完成反向追蹤。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,將第三維數(shù)組中記錄在第一記錄位置的多維向量對(duì)象,作為與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象,其中,第三維數(shù)組的第一記錄位置與第二維數(shù)組的第三記錄位置具有相同的位置坐標(biāo)。根據(jù)本申請(qǐng)上述實(shí)施例,步驟s235,基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤或反向追蹤反編譯程序,包括:步驟s2350,獲取待追蹤的多維向量對(duì)象所包含的所有分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊。步驟s2352,對(duì)待追蹤的多維向量對(duì)象所包含的所有分支向量進(jìn)行深度優(yōu)先遍歷,在遍歷到第一分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令的標(biāo)識(shí)信息。步驟s2354,根據(jù)調(diào)用函數(shù)指令的標(biāo)識(shí)信息,在第一維數(shù)組中確定調(diào)用函數(shù)指令的坐標(biāo)位置。步驟s2356,并根據(jù)調(diào)用函數(shù)指令在第一維數(shù)組中的坐標(biāo)位置,在第二維數(shù)組中查詢得到對(duì)應(yīng)的新多維向量對(duì)象。步驟s2358,并從新多維向量對(duì)象開(kāi)始執(zhí)行深度遞歸遍歷來(lái)完成正向追蹤。在一種可選的方案中,在三維坐標(biāo)系中,根據(jù)提供的類名加方法簽名信息轉(zhuǎn)化為x軸坐標(biāo)上點(diǎn)記為m,然后,到y(tǒng)軸上的m位置處取出向量dm。如果是正向追蹤執(zhí)行流,則取出dm所映射的所有執(zhí)行分支并進(jìn)行深度優(yōu)先遍歷,每當(dāng)在某個(gè)執(zhí)行分支遇到調(diào)用函數(shù)指令則取出該函數(shù)的類名和方法簽名去x軸找到坐標(biāo)位置k,然后,再根據(jù)位置k查找y軸找到新向量dk,從dk開(kāi)始繼續(xù)深度遞歸遍歷實(shí)現(xiàn)正向追蹤執(zhí)行流。如果是反向追蹤執(zhí)行流,則取出dm所映射的所有分支后從分支尾部基本塊開(kāi)始追蹤,每當(dāng)追蹤到執(zhí)行分支的頭部,則取出z軸上m位置上的向量隊(duì)列中的某個(gè)向量dz,然后,重新以向量dz為執(zhí)行入口進(jìn)行反向執(zhí)行追蹤。通過(guò)本申請(qǐng)上述實(shí)施例,根據(jù)smali語(yǔ)言中的分支指令,對(duì)android程序中的任意java方法進(jìn)行切片處理,切片后由smali指令組成的基本塊構(gòu)成了多個(gè)執(zhí)行分支。本申請(qǐng)通過(guò)對(duì)android程序的smali指令進(jìn)行三維坐標(biāo)系和多緯向量建模,為android靜態(tài)自動(dòng)化漏洞挖掘提供了一種可以從某個(gè)執(zhí)行點(diǎn)快速地正向或反向追蹤程序執(zhí)行流的方法。下面結(jié)合圖3和圖4詳細(xì)介紹本申請(qǐng)的一種優(yōu)選的實(shí)施例。如圖3和圖4所示,提供了一種可選的反編譯數(shù)據(jù)的處理方法,該方法可以包括如下步驟s41至步驟s415:步驟s41,初始化三維坐標(biāo)軸x,y,z軸??蛇x地,初始化三維坐標(biāo)系模型,使x,y,z軸為空,其中x,y,z軸都是順序結(jié)構(gòu),z軸隊(duì)列的每個(gè)元素也是順序結(jié)構(gòu)用以保存多個(gè)調(diào)用者的向量,x和y軸隊(duì)列的元素分別保存字符串對(duì)象和向量對(duì)象。步驟s42,遍歷smali程序中的方法。步驟s43,判斷是否遍歷完成。具體地,遍歷smali程序中的下一個(gè)方法,如果沒(méi)有遍歷完則進(jìn)入步驟s44;如果遍歷完成則進(jìn)入步驟s412。步驟s44,將方法切片生成分支執(zhí)行序列(bc1,bc2,…,bcn)并轉(zhuǎn)化為向量ds??蛇x地,根據(jù)分支跳轉(zhuǎn)偏移,將步驟s42對(duì)方法切片后所得的smali指令基本塊組建成分支執(zhí)行序列(bc1,bc2,…,bcn),每個(gè)執(zhí)行分支bcx都是一個(gè)基本塊序列(b1,b2,…,bn),而每個(gè)基本塊bx都是由smali指令構(gòu)成,針對(duì)上述分支執(zhí)行序列(bc1,bc2,…,bcn)建立對(duì)應(yīng)的多維向量ds對(duì)象。步驟s45,將切片方法的類名和方法簽名信息映射到x軸上,將ds映射到y(tǒng)軸上。可選地,將步驟s44切片的方法的類名和方法簽名映射到步驟s41中初始化的三維坐標(biāo)系的x軸上,即放入x軸隊(duì)列中,其在x軸隊(duì)列中的位置記為m,將步驟s44中的向量ds映射到y(tǒng)軸上,即放入y軸隊(duì)列中的m位置上。如果已經(jīng)映射過(guò)了無(wú)需映射。步驟s46,循環(huán)遍歷向量ds中的分支執(zhí)行向量bcx。步驟s47,判斷是否有調(diào)用函數(shù)指令。具體地,如果有調(diào)用指令,則進(jìn)入步驟s48,取出被調(diào)函數(shù)的類名和方法名信息記為xm;如果沒(méi)有,則返回步驟s46。步驟s49,判斷x軸是否存在xm坐標(biāo)m。具體地,如果x軸存在xm坐標(biāo)m,則進(jìn)入步驟s410,取y軸上m位置坐標(biāo)處被調(diào)向量dt,并將向量ds放入向量dt所對(duì)應(yīng)的z軸坐標(biāo)的隊(duì)列中,執(zhí)行完成之后返回步驟s42;如果不存在,則進(jìn)入步驟s411,建立一個(gè)空向量dt映射到y(tǒng)軸坐標(biāo)上,同時(shí)將xm映射到x軸上,執(zhí)行完成之后返回步驟s42??蛇x地,循環(huán)遍歷向量ds中的每個(gè)分支向量對(duì)應(yīng)的bcx,遍歷分支中的smali指令,如果存在調(diào)用函數(shù)指令,則取出該函數(shù)的類名和方法名信息記為xn,然后,查找x軸是否存在xn的坐標(biāo)n,如果存在該點(diǎn),則通過(guò)與該點(diǎn)對(duì)應(yīng)的y軸上的n坐標(biāo)處取出被調(diào)用向量dt,并將向量ds放入向量dt所對(duì)應(yīng)的z軸n處的隊(duì)列中,這樣就建立了一個(gè)向量ds指向向量dt的關(guān)系,即建立了一個(gè)函數(shù)調(diào)用鏈關(guān)系;如果xn在x軸上不存在,則建立一個(gè)空向量dt映射到y(tǒng)軸坐標(biāo)上,同時(shí)將xn映射到x軸上n坐標(biāo)處。繼續(xù)步驟s42,直到完成遍歷。步驟s412,開(kāi)始指令執(zhí)行追蹤過(guò)程,取待追蹤的類名加方法簽名信息記為xm轉(zhuǎn)化為x軸上坐標(biāo)m,然后,取y軸上m位置處向量dm??蛇x地,在三維坐標(biāo)系中,根據(jù)提供的類名加方法簽名信息轉(zhuǎn)化為x軸坐標(biāo)上點(diǎn)記為m,然后,到y(tǒng)軸上的m位置處取出向量dm。步驟s413,判斷是正向追蹤執(zhí)行過(guò)程或者反向追蹤執(zhí)行過(guò)程。具體地,如果是正向追蹤執(zhí)行過(guò)程,則進(jìn)入步驟s414,取出dm所映射的所有執(zhí)行分支并進(jìn)行深度優(yōu)先遍歷,每當(dāng)在某個(gè)執(zhí)行分支遇到調(diào)用函數(shù)指令則取出該函數(shù)的類名和方法簽名去x軸找到坐標(biāo)位置k,然后,再根據(jù)位置k查找y軸找到新向量dk,從dk開(kāi)始繼續(xù)深度遞歸遍歷實(shí)現(xiàn)正向追蹤執(zhí)行流;如果是反向追蹤執(zhí)行過(guò)程,則進(jìn)入步驟s415,取出dm所映射的所有分支后從分支尾部基本塊開(kāi)始追蹤,每當(dāng)追蹤到執(zhí)行分支的頭部,則取出z軸上m位置上的向量隊(duì)列中的某個(gè)向量dz,然后,重新以向量dz為執(zhí)行入口進(jìn)行反向執(zhí)行追蹤。本申請(qǐng)將所有方法的類名加方法簽名信息映射到三維坐標(biāo)系中的橫軸(記為x軸)上,將對(duì)應(yīng)于該方法的所有執(zhí)行分支映射成一個(gè)多維向量(多維向量記為d),將所有多維向量映射到三維坐標(biāo)系中的縱軸(記為y軸)上,將某個(gè)多維向量的調(diào)用關(guān)系映射到三維坐標(biāo)系的垂直于x軸y軸平面的z軸上。當(dāng)需要正向從某個(gè)方法追蹤執(zhí)行分支的時(shí)候,只需要用該方法的類名加方法簽名就可以快速的從三維坐標(biāo)系的x軸對(duì)應(yīng)的 y軸上定位到執(zhí)行入口函數(shù)的多維向量d,然后,對(duì)d的所有向量采用深度優(yōu)先遞歸遍歷,即完成全分支覆蓋。上述優(yōu)選的實(shí)施例可以通過(guò)以下模塊執(zhí)行實(shí)現(xiàn):程序切片和分支剝離模塊(記為b),主要負(fù)責(zé)對(duì)android程序反編譯成smali程序,并對(duì)smali程序按方法逐個(gè)進(jìn)行切片和分支剝離,最終,形成以切片后的smali指令基本塊構(gòu)成的多個(gè)執(zhí)行分支,如圖3中ds和dt的各自執(zhí)行分支bc1和bc2。向量模型管理模塊(記為v),主要負(fù)責(zé)將b模塊完成的每個(gè)方法的所有執(zhí)行分支映射到多維向量中,程序中的每個(gè)方法對(duì)應(yīng)一個(gè)多維向量,每個(gè)方法的每個(gè)分支對(duì)應(yīng)一個(gè)多維向量中的某一維,如圖1中ds和dt分別與bc1和bc2之間的關(guān)系。每完成一個(gè)多維向量的創(chuàng)建就會(huì)在三維坐標(biāo)系管理模塊中登記該向量。三維坐標(biāo)系模型管理模塊(記為c),主要負(fù)責(zé)完成將登記過(guò)的多維向量映射到三維坐標(biāo)系中,如圖3中的ds和dt在三維坐標(biāo)系中分別獲得了各自的坐標(biāo)(m,m,m)和(n,n,n)。分支執(zhí)行追蹤模塊(記為t),主要負(fù)責(zé)從某個(gè)執(zhí)行入口正向或反向追蹤程序的執(zhí)行流。需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。實(shí)施例2根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述反編譯數(shù)據(jù)的處理方法的反編譯數(shù)據(jù)的處理裝置,如圖5所示,該裝置包括:創(chuàng)建模塊51,第一獲取模塊53,第二獲 取模塊55和記錄模塊57。其中,創(chuàng)建模塊51用于創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組。在一種可選的方案中,上述三維數(shù)組可以是三維坐標(biāo)系模型,上述第一維數(shù)組、第二維數(shù)組和第三維數(shù)組可以是三維坐標(biāo)系模型的坐標(biāo)軸,第一維數(shù)組可以是x軸,第二維數(shù)組可以是y軸,第三維數(shù)據(jù)可以是z軸,創(chuàng)建三維數(shù)組模型可以是初始化三維坐標(biāo)系模型,使x,y,z軸為空,其中x,y,z軸都是順序結(jié)構(gòu),z軸隊(duì)列的每個(gè)元素也是順序結(jié)構(gòu)用以保存多個(gè)調(diào)用者的向量,x和y軸隊(duì)列的元素分別保存字符串對(duì)象和向量對(duì)象。第一獲取模塊53用于在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息。第二獲取模塊55用于獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系。記錄模塊57用于將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至第一維數(shù)組中、第二維數(shù)組中和第三維數(shù)組中。在一種可選的方案中,可以通過(guò)三維坐標(biāo)系模型管理模塊和分支執(zhí)行追蹤模塊執(zhí)行上述步驟,其中,三維坐標(biāo)系模型管理模塊(記為c),主要負(fù)責(zé)完成將登記過(guò)的多維向量映射到三維坐標(biāo)系中,如圖3所示,多維向量ds和dt在三維坐標(biāo)系中分別獲得了各自的坐標(biāo)(m,m,m)和(n,n,n)。分支執(zhí)行追蹤模塊(記為t),主要負(fù)責(zé)從某個(gè)執(zhí)行入口正向或反向追蹤程序的執(zhí)行流。本申請(qǐng)上述實(shí)施例二公開(kāi)的方案中,可以在將應(yīng)用程序反編譯為反編譯程序之后,第一獲取模塊和第二獲取模塊遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系,記錄模塊將每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系記錄至創(chuàng)建模塊創(chuàng)建好的三維數(shù)組模型。容易注意到,由于可以通過(guò)將遍歷反編譯程序獲取到每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系全部記錄到創(chuàng)建的三維數(shù)組模型中,實(shí)現(xiàn)根據(jù)方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象的目的,因此,通過(guò)本申請(qǐng)實(shí)施例所提供的方案,可以根據(jù)需要的方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象,然后對(duì)所有向量采用深度優(yōu)先遞歸遍歷, 完成全分支覆蓋。由此,本申請(qǐng)?zhí)峁┑纳鲜鰧?shí)施例二的方案解決了現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,任意一個(gè)方法在第一維數(shù)組、第二維數(shù)組和第三維數(shù)組中對(duì)應(yīng)的記錄位置具有相同的位置坐標(biāo)。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,記錄模塊57包括:第一記錄子模塊。其中,第一記錄子模塊用于將每個(gè)方法的標(biāo)識(shí)信息以隊(duì)列形式的順序結(jié)構(gòu)映射至第一維數(shù)組中,并記錄每個(gè)方法的標(biāo)識(shí)信息在第一維數(shù)組的隊(duì)列中的記錄位置。在一種可選的方案中,記錄子模塊可以將獲取到的每個(gè)方法的標(biāo)識(shí)信息(即切片的方法的類名和方法簽名)映射到創(chuàng)建模塊初始化的三維坐標(biāo)系的x軸上,即放入x軸隊(duì)列中,其在x軸隊(duì)列中的位置記為m,并將第二獲取模塊獲取到的多維向量ds映射到y(tǒng)軸上,即放入y軸隊(duì)列中的m位置上。如果已經(jīng)映射過(guò)了無(wú)需映射。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,記錄模塊57還包括:第二記錄子模塊。其中,第二記錄子模塊用于將每個(gè)方法所對(duì)應(yīng)的多維向量對(duì)象以隊(duì)列形式的順序結(jié)構(gòu)映射至第二維數(shù)組中,并記錄每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象在第二維數(shù)組的隊(duì)列中的記錄位置。根據(jù)本申請(qǐng)上述實(shí)施例,如圖6所示,第二獲取模塊55包括:第一處理模塊61和建立模塊63。其中,第一處理模塊61用于在遍歷得到反編譯程序所包含的多個(gè)方法之后,將每個(gè)方法進(jìn)行切片和分支剝離處理,得到每個(gè)方法所包含的多個(gè)執(zhí)行分支,執(zhí)行分支由反編譯得到的程序基本塊構(gòu)成。具體地,上述程序基本塊可以是smali指令基本塊,可以根據(jù)分支跳轉(zhuǎn)偏移,將步驟s25中獲取到的每個(gè)方法切片后所得的smali指令基本塊組建成分支執(zhí)行序列(bc1,bc2,…,bcn),每個(gè)執(zhí)行分支bcx(即bc1,bc2,…,bcn中的任意一個(gè))都是一個(gè)基本塊序列(b1,b2,…,bn),而每個(gè)基本塊bx(即b1,b2,…,bn中的任意一個(gè))都是由smali指令構(gòu)成。在一種可選的方案中,可以通過(guò)程序切片和分支剝離模塊執(zhí)行上述步驟,其中, 程序切片和分支剝離模塊(記為b),主要負(fù)責(zé)對(duì)android程序反編譯成smali程序,并對(duì)smali程序按方法逐個(gè)進(jìn)行切片和分支剝離,最終,形成以切片后的smali指令基本塊構(gòu)成的多個(gè)執(zhí)行分支,如圖3所示的多維向量ds和dt的各自執(zhí)行分支bc1和bc2。建立模塊63用于將每個(gè)方法所包含的執(zhí)行分支映射到多維向量中,建立每個(gè)方法的執(zhí)行分支序列所對(duì)應(yīng)的多維向量對(duì)象,其中,方法中包含的執(zhí)行分支在對(duì)應(yīng)的多維向量對(duì)象中存在一個(gè)分支向量。具體地,針對(duì)第一處理模塊61得出的分支執(zhí)行序列(bc1,bc2,…,bcn)建立對(duì)應(yīng)的多維向量ds對(duì)象。在一種可選的方案中,可以通過(guò)向量模型管理模塊執(zhí)行上述步驟,其中,向量模型管理模塊(記為v),主要負(fù)責(zé)將b模塊完成的每個(gè)方法的所有執(zhí)行分支映射到多維向量中,程序中的每個(gè)方法對(duì)應(yīng)一個(gè)多維向量,每個(gè)方法的每個(gè)分支對(duì)應(yīng)一個(gè)多維向量中的某一維,如圖1中ds和dt分別與bc1和bc2之間的關(guān)系。每完成一個(gè)多維向量的創(chuàng)建就會(huì)在三維坐標(biāo)系管理模塊中登記該向量。根據(jù)本申請(qǐng)上述實(shí)施例,如圖7所示,第二獲取模塊55還包括:第二處理模塊71。其中,第二處理模塊71用于循環(huán)遍歷第二維數(shù)組中的多維向量對(duì)象,在第二維數(shù)組中確定任意一個(gè)方法的第一多維向量對(duì)象之后,使用回溯處理方法確定與第一多維向量對(duì)象具有函數(shù)調(diào)用鏈關(guān)系的第二多維向量對(duì)象,得到每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系。根據(jù)本申請(qǐng)上述實(shí)施例,如圖8所示,第二處理模塊71包括:第一獲取子模塊81,處理子模塊82,第二獲取子模塊83,第三獲取子模塊84,第四獲取子模塊85,第五獲取子模塊86和記錄子模塊87。其中,第一獲取子模塊81用于獲取第二維數(shù)組中記錄在第一記錄位置的第一多維向量對(duì)象。處理子模塊82用于遍歷第一多維向量對(duì)象所包含的多個(gè)分支向量,得到每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含的程序基本塊,其中,程序基本塊由反編譯得到的程序指令構(gòu)成。第二獲取子模塊83用于如果分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令所調(diào)用的被調(diào)函數(shù)的標(biāo)識(shí)信息。第三獲取子模塊84用于根據(jù)被調(diào)函數(shù)的標(biāo)識(shí)信息,在第一維數(shù)組中查詢是否存在與被調(diào)函數(shù)的標(biāo)識(shí)信息相同的方法,獲取標(biāo)識(shí)信息相同的第一類方法。第四獲取子模塊85用于獲取第一類方法在第一維數(shù)組中的第一記錄位置。第五獲取子模塊86用于在第二維數(shù)組中查詢與第一記錄位置的坐標(biāo)值相同的第二記錄位置,并獲取記錄在第二記錄位置的第二多維向量對(duì)象,其中,第二多維向量對(duì)象為被第一多維向量對(duì)象調(diào)用的向量對(duì)象。記錄子模塊87用于將第一多維向量對(duì)象和第二多維向量對(duì)象之間的函數(shù)調(diào)用關(guān)系記錄在第三維數(shù)組中的對(duì)應(yīng)位置,第三維數(shù)組中的對(duì)應(yīng)位置與第二維數(shù)組中的第一記錄位置相同。在一種可選的方案中,循環(huán)遍歷多維向量ds中的每個(gè)分支向量對(duì)應(yīng)的執(zhí)行分支bcx,遍歷分支中的smali指令,如果存在調(diào)用函數(shù)指令,則取出該函數(shù)的類名和方法名信息記為xn,然后,查找x軸是否存在xn的坐標(biāo)n,如果存在該點(diǎn),則通過(guò)與該點(diǎn)對(duì)應(yīng)的y軸上的n坐標(biāo)處取出被調(diào)用向量dt,并將向量ds放入向量dt所對(duì)應(yīng)的z軸n處的隊(duì)列中,這樣就建立了一個(gè)向量ds指向向量dt的關(guān)系,即建立了一個(gè)函數(shù)調(diào)用鏈關(guān)系。根據(jù)本申請(qǐng)上述實(shí)施例,在一種優(yōu)選的方案中,第二處理模塊71還可以包括:建立子模塊。其中,建立子模塊用于在第一維數(shù)組中未查詢到標(biāo)識(shí)信息相同的方法的情況下,在第二維數(shù)組中建立一個(gè)空向量,并將調(diào)用函數(shù)指令所調(diào)用的函數(shù)的標(biāo)識(shí)信息映射到第一維數(shù)組中的對(duì)應(yīng)位置。在一種可選的方案中,如果xn在x軸上不存在,則建立一個(gè)空向量dt映射到y(tǒng)軸坐標(biāo)上,同時(shí)將xn映射到x軸上n坐標(biāo)處。根據(jù)本申請(qǐng)上述實(shí)施例,如圖9所示,上述裝置還包括:?jiǎn)?dòng)模塊91,第一確定模塊93和追蹤模塊95。其中,啟動(dòng)模塊91用于如果反編譯程序中所包含的多個(gè)方法被遍歷完全,則啟動(dòng)追蹤處理流程。第一確定模塊93用于接收待追蹤的方法的標(biāo)識(shí)信息,并根據(jù)待追蹤的方法的標(biāo)識(shí)信息確定待追蹤的多維向量對(duì)象。追蹤模塊95用于基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤或反向追蹤反編譯程 序。在一種可選的方案中,在追蹤某一向量的過(guò)程中,遇到調(diào)用函數(shù)情形,只需要在三維坐標(biāo)系查找z軸映射關(guān)系就可以定位到下一個(gè)執(zhí)行入口函數(shù),進(jìn)去之后繼續(xù)深度優(yōu)先遍歷;而反向追蹤執(zhí)行流程也類似,定位入口之后從向量尾部反向追蹤,到達(dá)向量頂點(diǎn)則查找z軸,找到后通過(guò)三維坐標(biāo)系定位到調(diào)用者的向量繼續(xù)反向追蹤過(guò)程。本申請(qǐng)通過(guò)三維坐標(biāo)系和多維向量模型,在定位執(zhí)行入口,正向或反向追蹤程序執(zhí)行流方面加快了遍歷和查找速度,健全了分支覆蓋,使程序編碼更清晰、簡(jiǎn)單、穩(wěn)定和易于維護(hù)。根據(jù)本申請(qǐng)上述實(shí)施例,如圖10所示,追蹤模塊95包括:第三獲取模塊101,第四獲取模塊103和執(zhí)行模塊105。其中,第三獲取模塊101用于獲取待追蹤的多維向量對(duì)象在第二維數(shù)組中的第三記錄位置,以及待追蹤的多維向量對(duì)象所包含的分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊。第四獲取模塊103用于基于執(zhí)行分支的尾部程序基本塊進(jìn)行反向追蹤,在追蹤到執(zhí)行分支的頭部程序基本塊時(shí),從第三維數(shù)組中獲取與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象。執(zhí)行模塊105用于在將與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象作為執(zhí)行入口之后,執(zhí)行后續(xù)的深度優(yōu)先遍歷來(lái)完成反向追蹤。根據(jù)本申請(qǐng)上述實(shí)施例,如圖11所示,上述裝置還包括:第三處理模塊111。其中,第三處理模塊111用于將第三維數(shù)組中記錄在第一記錄位置的多維向量對(duì)象,作為與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象,其中,第三維數(shù)組的第一記錄位置與第二維數(shù)組的第三記錄位置具有相同的位置坐標(biāo)。根據(jù)本申請(qǐng)上述實(shí)施例,如圖12所示,追蹤模塊95包括:第五獲取模塊121,第六獲取模塊123,第二確定模塊125,查詢模塊127和第四處理模塊129。其中,第五獲取模塊121用于獲取待追蹤的多維向量對(duì)象所包含的所有分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊。第六獲取模塊123用于對(duì)待追蹤的多維向量對(duì)象所包含的所有分支向量進(jìn)行深度優(yōu)先遍歷,在遍歷到第一分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令的標(biāo)識(shí)信息。第二確定模塊125用于根據(jù)調(diào)用函數(shù)指令的標(biāo)識(shí)信息,在第一維數(shù)組中確定調(diào)用函數(shù)指令的坐標(biāo)位置。查詢模塊127用于并根據(jù)調(diào)用函數(shù)指令在第一維數(shù)組中的坐標(biāo)位置,在第二維數(shù)組中查詢得到對(duì)應(yīng)的新多維向量對(duì)象。第四處理模塊129用于并從新多維向量對(duì)象開(kāi)始執(zhí)行深度遞歸遍歷來(lái)完成正向追蹤。在一種可選的方案中,在三維坐標(biāo)系中,根據(jù)提供的類名加方法簽名信息轉(zhuǎn)化為x軸坐標(biāo)上點(diǎn)記為m,然后,到y(tǒng)軸上的m位置處取出向量dm。如果是正向追蹤執(zhí)行流,則取出dm所映射的所有執(zhí)行分支并進(jìn)行深度優(yōu)先遍歷,每當(dāng)在某個(gè)執(zhí)行分支遇到調(diào)用函數(shù)指令則取出該函數(shù)的類名和方法簽名去x軸找到坐標(biāo)位置k,然后,再根據(jù)位置k查找y軸找到新向量dk,從dk開(kāi)始繼續(xù)深度遞歸遍歷實(shí)現(xiàn)正向追蹤執(zhí)行流。如果是反向追蹤執(zhí)行流,則取出dm所映射的所有分支后從分支尾部基本塊開(kāi)始追蹤,每當(dāng)追蹤到執(zhí)行分支的頭部,則取出z軸上m位置上的向量隊(duì)列中的某個(gè)向量dz,然后,重新以向量dz為執(zhí)行入口進(jìn)行反向執(zhí)行追蹤通過(guò)本申請(qǐng)上述實(shí)施例,根據(jù)smali語(yǔ)言中的分支指令,對(duì)android程序中的任意java方法進(jìn)行切片處理,切片后由smali指令組成的基本塊構(gòu)成了多個(gè)執(zhí)行分支。本申請(qǐng)通過(guò)對(duì)android程序的smali指令進(jìn)行三維坐標(biāo)系和多緯向量建模,為android靜態(tài)自動(dòng)化漏洞挖掘提供了一種可以從某個(gè)執(zhí)行點(diǎn)快速地正向或反向追蹤程序執(zhí)行流的方法。實(shí)施例3本發(fā)明的實(shí)施例可以提供一種計(jì)算機(jī)終端,該計(jì)算機(jī)終端可以是計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端設(shè)備??蛇x地,在本實(shí)施例中,上述計(jì)算機(jī)終端也可以替換為移動(dòng)終端等終端設(shè)備。可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端可以位于計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)網(wǎng)絡(luò)設(shè)備中的至少一個(gè)網(wǎng)絡(luò)設(shè)備。在本實(shí)施例中,上述計(jì)算機(jī)終端可以執(zhí)行反編譯數(shù)據(jù)的處理方法中以下步驟的程序代碼:創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組;在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息;獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系;將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記 錄至第一維數(shù)組、第二維數(shù)組中和第三維數(shù)組中??蛇x地,圖13是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖13所示,該計(jì)算機(jī)終端a可以包括:一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器131、存儲(chǔ)器133、以及傳輸裝置135。其中,存儲(chǔ)器133可用于存儲(chǔ)軟件程序以及模塊,如本發(fā)明實(shí)施例中的反編譯數(shù)據(jù)的處理方法和裝置對(duì)應(yīng)的程序指令/模塊,處理器131通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器133內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的反編譯數(shù)據(jù)的處理方法。存儲(chǔ)器133可包括高速隨機(jī)存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器133可進(jìn)一步包括相對(duì)于處理器遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至終端a。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。處理器131可以通過(guò)傳輸裝置135調(diào)用存儲(chǔ)器133存儲(chǔ)的信息及應(yīng)用程序,以執(zhí)行下述步驟:創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組;在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息;獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系;將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至第一維數(shù)組中、第二維數(shù)組中和第三維數(shù)組中??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:任意一個(gè)方法在第一維數(shù)組、第二維數(shù)組和第三維數(shù)組中對(duì)應(yīng)的記錄位置具有相同的位置坐標(biāo)??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:將每個(gè)方法的標(biāo)識(shí)信息以隊(duì)列形式的順序結(jié)構(gòu)映射至第一維數(shù)組中,并記錄每個(gè)方法的標(biāo)識(shí)信息在第一維數(shù)組的隊(duì)列中的記錄位置??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:將每個(gè)方法所對(duì)應(yīng)的多維向量對(duì)象以隊(duì)列形式的順序結(jié)構(gòu)映射至第二維數(shù)組中,并記錄每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象在第二維數(shù)組的隊(duì)列中的記錄位置。可選的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:在遍歷得到反編譯程序所包含的多個(gè)方法之后,將每個(gè)方法進(jìn)行切片和分支剝離處理,得到每個(gè)方法所包含的多個(gè)執(zhí)行分支,執(zhí)行分支由反編譯得到的程序基本塊構(gòu)成;將每個(gè)方法所包含的執(zhí)行分支映射到多維向量中,建立每個(gè)方法的執(zhí)行分支序列所對(duì)應(yīng)的多維向量對(duì)象, 其中,方法中包含的執(zhí)行分支在對(duì)應(yīng)的多維向量對(duì)象中存在一個(gè)分支向量??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:循環(huán)遍歷第二維數(shù)組中的多維向量對(duì)象,在第二維數(shù)組中確定任意一個(gè)方法的第一多維向量對(duì)象之后,使用回溯處理方法確定與第一多維向量對(duì)象具有函數(shù)調(diào)用鏈關(guān)系的第二多維向量對(duì)象,得到每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:獲取第二維數(shù)組中記錄在第一記錄位置的第一多維向量對(duì)象;遍歷第一多維向量對(duì)象所包含的多個(gè)分支向量,得到每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含的程序基本塊,其中,程序基本塊由反編譯得到的程序指令構(gòu)成;如果分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令所調(diào)用的被調(diào)函數(shù)的標(biāo)識(shí)信息;根據(jù)被調(diào)函數(shù)的標(biāo)識(shí)信息,在第一維數(shù)組中查詢是否存在與被調(diào)函數(shù)的標(biāo)識(shí)信息相同的方法,獲取標(biāo)識(shí)信息相同的第一類方法;獲取第一類方法在第一維數(shù)組中的第一記錄位置;在第二維數(shù)組中查詢與第一記錄位置的坐標(biāo)值相同的第二記錄位置,并獲取記錄在第二記錄位置的第二多維向量對(duì)象,其中,第二多維向量對(duì)象為被第一多維向量對(duì)象調(diào)用的向量對(duì)象;將第一多維向量對(duì)象和第二多維向量對(duì)象之間的函數(shù)調(diào)用關(guān)系記錄在第三維數(shù)組中的對(duì)應(yīng)位置??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:在第一維數(shù)組中未查詢到標(biāo)識(shí)信息相同的方法的情況下,在第二維數(shù)組中建立一個(gè)空向量,并將調(diào)用函數(shù)指令所調(diào)用的函數(shù)的標(biāo)識(shí)信息映射到第一維數(shù)組中的對(duì)應(yīng)位置??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:如果反編譯程序中所包含的多個(gè)方法被遍歷完全,則啟動(dòng)追蹤處理流程;接收待追蹤的方法的標(biāo)識(shí)信息,并根據(jù)待追蹤的方法的標(biāo)識(shí)信息確定待追蹤的多維向量對(duì)象;基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤或反向追蹤反編譯程序??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:獲取待追蹤的多維向量對(duì)象在第二維數(shù)組中的第三記錄位置,以及待追蹤的多維向量對(duì)象所包含的分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊;基于執(zhí)行分支的尾部程序基本塊進(jìn)行反向追蹤,在追蹤到執(zhí)行分支的頭部程序基本塊時(shí),從第三維數(shù)組中獲取與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象;在將與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象作為執(zhí)行入口之后,執(zhí)行后續(xù)的深度優(yōu)先遍歷來(lái)完成反向追蹤??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:將第三維數(shù)組中記錄 在第一記錄位置的多維向量對(duì)象,作為與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象,其中,第三維數(shù)組的第一記錄位置與第二維數(shù)組的第三記錄位置具有相同的位置坐標(biāo)??蛇x的,上述處理器131還可以執(zhí)行如下步驟的程序代碼:獲取待追蹤的多維向量對(duì)象所包含的所有分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊;對(duì)待追蹤的多維向量對(duì)象所包含的所有分支向量進(jìn)行深度優(yōu)先遍歷,在遍歷到第一分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令的標(biāo)識(shí)信息;根據(jù)調(diào)用函數(shù)指令的標(biāo)識(shí)信息,在第一維數(shù)組中確定調(diào)用函數(shù)指令的坐標(biāo)位置;并根據(jù)調(diào)用函數(shù)指令在第一維數(shù)組中的坐標(biāo)位置,在第二維數(shù)組中查詢得到對(duì)應(yīng)的新多維向量對(duì)象;并從新多維向量對(duì)象開(kāi)始執(zhí)行深度遞歸遍歷來(lái)完成正向追蹤。采用本發(fā)明實(shí)施例,提供了一種反編譯數(shù)據(jù)的處理方法的方案,可以在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系,并將每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系記錄至創(chuàng)建好的三維數(shù)組模型。容易注意到,由于可以通過(guò)將遍歷反編譯程序獲取到每個(gè)方法的標(biāo)識(shí)信息,對(duì)應(yīng)的多維向量對(duì)象和每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系全部記錄到創(chuàng)建的三維數(shù)組模型中,實(shí)現(xiàn)根據(jù)方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象的目的,因此,通過(guò)本申請(qǐng)實(shí)施例所提供的方案,可以根據(jù)需要的方法的類名和簽名信息從三維數(shù)組模型中快速定位到多維向量對(duì)象,然后對(duì)所有向量采用深度優(yōu)先遞歸遍歷,完成全分支覆蓋。由此,本申請(qǐng)?zhí)峁┑纳鲜龇桨附鉀Q了現(xiàn)有技術(shù)將基本塊結(jié)構(gòu)體以指針?lè)绞綐?gòu)建函數(shù)調(diào)用關(guān)系,在全分支覆蓋執(zhí)行方面遍歷速度慢的技術(shù)問(wèn)題。本領(lǐng)域普通技術(shù)人員可以理解,圖13所示的結(jié)構(gòu)僅為示意,計(jì)算機(jī)終端也可以是智能手機(jī)(如android手機(jī)、ios手機(jī)等)、平板電腦、掌聲電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備(mobileinternetdevices,mid)、pad等終端設(shè)備。圖13其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端a還可包括比圖13中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖13所示不同的配置。本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令終端設(shè)備相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介 質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤或光盤等。實(shí)施例4本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于保存上述實(shí)施例一所提供的反編譯數(shù)據(jù)的處理方法所執(zhí)行的程序代碼??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以位于計(jì)算機(jī)網(wǎng)絡(luò)中計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端中,或者位于移動(dòng)終端群中的任意一個(gè)移動(dòng)終端中??蛇x地,在本實(shí)施例中,存儲(chǔ)介質(zhì)被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:創(chuàng)建三維數(shù)組模型,三維數(shù)組模型包括:第一維數(shù)組、第二維數(shù)組和第三維數(shù)組;在將應(yīng)用程序反編譯為反編譯程序之后,遍歷反編譯程序所包含的多個(gè)方法,獲取每個(gè)方法的標(biāo)識(shí)信息,其中,方法的標(biāo)識(shí)信息包括:方法類名和方法簽名信息;獲取每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象,以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系;將每個(gè)方法的標(biāo)識(shí)信息、對(duì)應(yīng)的多維向量對(duì)象以及每個(gè)多維向量對(duì)象之間的調(diào)用關(guān)系分別記錄至第一維數(shù)組中、第二維數(shù)組中和第三維數(shù)組中。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:任意一個(gè)方法在第一維數(shù)組、第二維數(shù)組和第三維數(shù)組中對(duì)應(yīng)的記錄位置具有相同的位置坐標(biāo)??蛇x地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:將每個(gè)方法的標(biāo)識(shí)信息以隊(duì)列形式的順序結(jié)構(gòu)映射至第一維數(shù)組中,并記錄每個(gè)方法的標(biāo)識(shí)信息在第一維數(shù)組的隊(duì)列中的記錄位置??蛇x地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:將每個(gè)方法所對(duì)應(yīng)的多維向量對(duì)象以隊(duì)列形式的順序結(jié)構(gòu)映射至第二維數(shù)組中,并記錄每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象在第二維數(shù)組的隊(duì)列中的記錄位置。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:在遍歷得到反編譯程序所包含的多個(gè)方法之后,將每個(gè)方法進(jìn)行切片和分支剝離處理,得到每個(gè)方法所包含的多個(gè)執(zhí)行分支,執(zhí)行分支由反編譯得到的程序基本塊構(gòu)成;將每個(gè)方法所包含的執(zhí)行分支映射到多維向量中,建立每個(gè)方法的執(zhí)行分支序列所對(duì)應(yīng)的多維向量對(duì)象,其中,方法中包含的執(zhí)行分支在對(duì)應(yīng)的多維向量對(duì)象中存在一個(gè)分支向量??蛇x地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:循環(huán)遍歷第二維數(shù)組中的多維向量對(duì)象,在第二維數(shù)組中確定任意一個(gè)方法的第一多維向量對(duì)象之后,使用回溯處理方法確定與第一多維向量對(duì)象具有函數(shù)調(diào)用鏈關(guān)系的第二多維 向量對(duì)象,得到每個(gè)方法對(duì)應(yīng)的多維向量對(duì)象之間的調(diào)用關(guān)系??蛇x地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取第二維數(shù)組中記錄在第一記錄位置的第一多維向量對(duì)象;遍歷第一多維向量對(duì)象所包含的多個(gè)分支向量,得到每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含的程序基本塊,其中,程序基本塊由反編譯得到的程序指令構(gòu)成;如果分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令所調(diào)用的被調(diào)函數(shù)的標(biāo)識(shí)信息;根據(jù)被調(diào)函數(shù)的標(biāo)識(shí)信息,在第一維數(shù)組中查詢是否存在與被調(diào)函數(shù)的標(biāo)識(shí)信息相同的方法,獲取標(biāo)識(shí)信息相同的第一類方法;獲取第一類方法在第一維數(shù)組中的第一記錄位置;在第二維數(shù)組中查詢與第一記錄位置的坐標(biāo)值相同的第二記錄位置,并獲取記錄在第二記錄位置的第二多維向量對(duì)象,其中,第二多維向量對(duì)象為被第一多維向量對(duì)象調(diào)用的向量對(duì)象;將第一多維向量對(duì)象和第二多維向量對(duì)象之間的函數(shù)調(diào)用關(guān)系記錄在第三維數(shù)組中的對(duì)應(yīng)位置。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:在第一維數(shù)組中未查詢到標(biāo)識(shí)信息相同的方法的情況下,在第二維數(shù)組中建立一個(gè)空向量,并將調(diào)用函數(shù)指令所調(diào)用的函數(shù)的標(biāo)識(shí)信息映射到第一維數(shù)組中的對(duì)應(yīng)位置。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:如果反編譯程序中所包含的多個(gè)方法被遍歷完全,則啟動(dòng)追蹤處理流程;接收待追蹤的方法的標(biāo)識(shí)信息,并根據(jù)待追蹤的方法的標(biāo)識(shí)信息確定待追蹤的多維向量對(duì)象;基于待追蹤的多維向量對(duì)象進(jìn)行正向追蹤或反向追蹤反編譯程序??蛇x地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取待追蹤的多維向量對(duì)象在第二維數(shù)組中的第三記錄位置,以及待追蹤的多維向量對(duì)象所包含的分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊;基于執(zhí)行分支的尾部程序基本塊進(jìn)行反向追蹤,在追蹤到執(zhí)行分支的頭部程序基本塊時(shí),從第三維數(shù)組中獲取與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象;在將與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象作為執(zhí)行入口之后,執(zhí)行后續(xù)的深度優(yōu)先遍歷來(lái)完成反向追蹤。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:將第三維數(shù)組中記錄在第一記錄位置的多維向量對(duì)象,作為與待追蹤的多維向量對(duì)象具有調(diào)用關(guān)系的多維向量對(duì)象,其中,第三維數(shù)組的第一記錄位置與第二維數(shù)組的第三記錄位置具有相同的位置坐標(biāo)。可選地,上述存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取待追 蹤的多維向量對(duì)象所包含的所有分支向量,其中,每個(gè)分支向量所對(duì)應(yīng)的執(zhí)行分支中所包含多個(gè)程序基本塊;對(duì)待追蹤的多維向量對(duì)象所包含的所有分支向量進(jìn)行深度優(yōu)先遍歷,在遍歷到第一分支向量中包含的一個(gè)或多個(gè)程序指令為調(diào)用函數(shù)指令,則獲取調(diào)用函數(shù)指令的標(biāo)識(shí)信息;根據(jù)調(diào)用函數(shù)指令的標(biāo)識(shí)信息,在第一維數(shù)組中確定調(diào)用函數(shù)指令的坐標(biāo)位置;并根據(jù)調(diào)用函數(shù)指令在第一維數(shù)組中的坐標(biāo)位置,在第二維數(shù)組中查詢得到對(duì)應(yīng)的新多維向量對(duì)象;并從新多維向量對(duì)象開(kāi)始執(zhí)行深度遞歸遍歷來(lái)完成正向追蹤。上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
:的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12