本申請(qǐng)涉及移動(dòng)安全領(lǐng)域,具體而言,涉及一種基于文件的漏洞檢測(cè)方法和裝置。
背景技術(shù):
隨著android插件化開(kāi)發(fā)的流行,較為大型的應(yīng)用設(shè)計(jì)通常都會(huì)使用插件化開(kāi)發(fā),即將一些功能通過(guò)子dex(dalvikvmexecutes的縮寫(xiě),為一種用于android的可執(zhí)行程序)的方式集成進(jìn)apk(androidpackage的縮寫(xiě),即android安裝程序包)中。在運(yùn)行apk時(shí)動(dòng)態(tài)加載這些dex文件,以實(shí)現(xiàn)dex文件對(duì)應(yīng)的功能。
而標(biāo)準(zhǔn)的應(yīng)用程序的apk只包含一個(gè)主dex文件,在對(duì)應(yīng)用程序進(jìn)行漏洞查找時(shí),需反編譯apk,并對(duì)反編譯出的語(yǔ)句進(jìn)行漏洞查找?,F(xiàn)有技術(shù)中的漏洞掃描系統(tǒng)只檢測(cè)apk中的主dex文件,并對(duì)其進(jìn)行反編譯,并不對(duì)apk中的子dex文件進(jìn)行反編譯,但是子dex文件中也可能有程序漏洞,無(wú)法掃描子dex文件也便無(wú)法掃描子dex文件中的漏洞,從而會(huì)漏掉apk中的某些漏洞。
針對(duì)現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種基于文件的漏洞檢測(cè)方法和裝置,以至少解決現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例的一個(gè)方面,提供了一種基于文件的漏洞檢測(cè)方法,該方法包括:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件;提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征;基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件;在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
根據(jù)本申請(qǐng)實(shí)施例的另一方面,還提供了一種基于文件的漏洞檢測(cè)裝置,該裝置包括:獲取模塊,用于獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件;提取模塊,用于提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng) 子文件的文件特征;確定模塊,用于基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件;掃描模塊,用于在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
在本申請(qǐng)實(shí)施例中,基于待檢測(cè)程序中每個(gè)子文件的文件特征,查找待檢測(cè)程序的程序文件中的可執(zhí)行文件(如dex文件),并利用確定的所有可執(zhí)行文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。通過(guò)上述實(shí)施例,可以查找到待檢測(cè)程序的程序文件中所有可執(zhí)行文件,包括主可執(zhí)行文件和子可執(zhí)行文件,并對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,從而解決了現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1是本申請(qǐng)實(shí)施例的一種基于文件的漏洞檢測(cè)方法的計(jì)算機(jī)終端的結(jié)構(gòu)框圖;
圖2是根據(jù)本申請(qǐng)實(shí)施例的一種基于文件的漏洞檢測(cè)方法的流程圖;
圖3是根據(jù)本申請(qǐng)實(shí)施例的一種可選的基于文件的漏洞檢測(cè)方法的流程圖;
圖4是根據(jù)本申請(qǐng)實(shí)施例的另一種可選的基于文件的漏洞檢測(cè)方法的流程圖;
圖5是根據(jù)本申請(qǐng)實(shí)施例的一種基于文件的漏洞檢測(cè)裝置的示意圖;
圖6是根據(jù)本申請(qǐng)實(shí)施例的一種可選的基于文件的漏洞檢測(cè)裝置的示意圖;
圖7是根據(jù)本申請(qǐng)實(shí)施例的另一種可選的基于文件的漏洞檢測(cè)裝置的示意圖;
圖8是根據(jù)本申請(qǐng)實(shí)施例的又一種可選的基于文件的漏洞檢測(cè)裝置的示意圖;
圖9是根據(jù)本申請(qǐng)實(shí)施例的第四種可選的基于文件的漏洞檢測(cè)裝置的示意圖;
圖10是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng) 域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
本申請(qǐng)涉及到的名詞解釋如下:
apk,英文名稱androidpackage,即android安裝包;
dex,英文名稱dalvikvmexecutes,一種用于android的可執(zhí)行程序;
應(yīng)用程序,是指運(yùn)行于操作系統(tǒng)上的計(jì)算機(jī)程序。
實(shí)施例1
根據(jù)本申請(qǐng)實(shí)施例,還提供了一種基于文件的漏洞檢測(cè)方法的實(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í)施例的一種基于文件的漏洞檢測(cè)方法的計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖1所示,計(jì)算機(jī)終端10可以包括一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器104、以及用于通信功能的傳輸模塊106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
存儲(chǔ)器104可用于存儲(chǔ)應(yīng)用軟件的軟件程序以及模塊,如本申請(qǐng)實(shí)施例中的基于文件的漏洞檢測(cè)方法對(duì)應(yīng)的程序指令/模塊,處理器102通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的反編譯指令中寄存器的處理方法。存儲(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)行通訊。
上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝艘环N基于文件的漏洞檢測(cè)方法。圖2是根據(jù)本申請(qǐng)實(shí)施例的一種基于文件的漏洞檢測(cè)方法的流程圖。如圖2所示,該方法可以包括如下步驟:
步驟s202:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件。
步驟s204:提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征。
步驟s206:基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件。
步驟s208:在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
采用本申請(qǐng)實(shí)施例,基于待檢測(cè)程序中每個(gè)子文件的文件特征,查找待檢測(cè)程序的程序文件中的可執(zhí)行文件(如dex文件),并利用確定的所有可執(zhí)行文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。通過(guò)上述實(shí)施例,可以查找到待檢測(cè)程序的程序文件中所有可執(zhí)行文件(包括主可執(zhí)行文件和子可執(zhí)行文件),并對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,從而解決了現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
上述的待檢測(cè)程序的程序文件可以為apk,該待檢測(cè)程序可以為即時(shí)通訊應(yīng)用程序、定位程序,在待檢測(cè)程序的程序文件中可以包括多個(gè)dex文件,dex文件為上述的可執(zhí)行文件。對(duì)待檢測(cè)程序進(jìn)行漏洞查找時(shí),可以通過(guò)apk編譯工具將待檢測(cè)程序的apk(該apk中可以包括源文件和資源文件)進(jìn)行反編譯,得到反編譯語(yǔ)句(如通 過(guò)smali語(yǔ)法得到的smali文件中的語(yǔ)句),并利用反編譯語(yǔ)句進(jìn)行漏洞查找。
上述的可執(zhí)行文件指的是可以由操作系統(tǒng)進(jìn)行加載執(zhí)行的文件。在不同的操作系統(tǒng)環(huán)境下,可執(zhí)行程序的呈現(xiàn)方式不一樣。如,在windows操作系統(tǒng)下,可執(zhí)行文件可以是.exe文件,也可以是.sys文件;另外,可執(zhí)行文件還可以是flash、bat、dex等格式,對(duì)應(yīng)于安卓操作系統(tǒng),可執(zhí)行文件為dex文件。
上述實(shí)施例中的程序文件apk可以通過(guò)打包工具將dex文件(.dex格式的文件)、資源文件(.arsc格式的文件)以及應(yīng)用全局配置文件(.xml格式的文件)打包得到,通過(guò)在終端中直接運(yùn)行該apk以實(shí)現(xiàn)待檢測(cè)程序的安裝,可選地,可以使用終端上的android模擬器運(yùn)行該apk。
其中,apk文件實(shí)際是一個(gè)zip格式的壓縮包,但后綴名被修改為apk,可以通過(guò)解壓工具(如unzip解壓)對(duì)程序文件apk進(jìn)行解壓,在解壓后,可以得到多個(gè)子文件,該多個(gè)子文件中可以包括dex文件,dex文件是dalvik字節(jié)碼的可執(zhí)行程序,每個(gè)程序文件apk中都包含一個(gè)或者多個(gè)dex文件。
上述的dex文件的文件結(jié)構(gòu)可以包括meta-inf目錄、res目錄(存放資源文件的目錄)、manifest.xml(程序全局配置文件)、classes.dex(dalvik字節(jié)碼)、resourcs.arsc。其中,meta-inf目錄下存放的是簽名信息,用來(lái)保證程序包的完整性和系統(tǒng)的安全;res目錄存放資源文件;manifest.xml用于描述應(yīng)用程序的名字、版本、權(quán)限、引用的庫(kù)文件等信息;classes.dex是java源代碼編譯后生成的java字節(jié)碼文件;resourcs.arsc存放編譯后的二進(jìn)制資源文件。
上述的終端可以為移動(dòng)終端,如智能手機(jī)、平板電腦等。
在上述實(shí)施例中,依次提取apk安裝程序中的每個(gè)子文件的文件特征,每個(gè)子文件中的文件特征信息都用于標(biāo)識(shí)文件特征,該文件特征信息可以使用文件的類型字段、版本字段標(biāo)識(shí)該文件的類型。
如,若子文件為壓縮文件,則對(duì)應(yīng)壓縮文件的文件特征,該文件特征可以為壓縮文件的標(biāo)識(shí)符字段、壓縮文件的版本字段以及壓縮文件的子文件總數(shù)的字段等;若子文件為dex文件,則對(duì)應(yīng)dex文件的文件特征,該文件特征可以為dex文件的標(biāo)識(shí)符字段、dex文件的版本字段等。
根據(jù)本申請(qǐng)的上述實(shí)施例,通過(guò)安裝在終端上的漏洞掃描系統(tǒng)對(duì)應(yīng)用程序進(jìn)行漏洞查找時(shí),首先通過(guò)漏洞掃描系統(tǒng)中的解壓工具解壓應(yīng)用程序的程序包,得到程序包中的多個(gè)子文件;其次通過(guò)漏洞掃描系統(tǒng)提取每個(gè)子文件的文件特征,并基于每個(gè)子文件的文件特征判斷其是否為可執(zhí)行文件,查找出多個(gè)子文件中的所有可執(zhí)行文件, 并對(duì)所有的可執(zhí)行文件進(jìn)行反編譯,得到反編譯語(yǔ)句,利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
以安卓操作系統(tǒng)為例,通過(guò)安裝在安卓手機(jī)上的漏洞掃描系統(tǒng)對(duì)待檢測(cè)程序進(jìn)行漏洞查找時(shí),首先通過(guò)漏洞掃描系統(tǒng)中的解壓工具解壓待檢測(cè)程序的程序包apk,得到程序包中的多個(gè)子文件;然后提取每個(gè)子文件的文件特征,若子文件的文件特征符合預(yù)定特征,則確定該子文件為dex文件,通過(guò)該方式可以查找到待檢測(cè)程序的程序文件中的所有dex文件,并基于所有的dex文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描,由于在掃描時(shí)使用了所有的dex文件,則通過(guò)上述實(shí)施例,不會(huì)出現(xiàn)漏洞漏報(bào)的情況。
在本申請(qǐng)的上述實(shí)施例中,提取每個(gè)子文件的文件特征信息可以包括:按照預(yù)設(shè)方式打開(kāi)每個(gè)子文件,并從打開(kāi)的子文件的預(yù)定位置讀取文件特征信息。
進(jìn)一步地,預(yù)設(shè)方式包括二進(jìn)制打開(kāi)方式,預(yù)定位置包括打開(kāi)的子文件的前n個(gè)字節(jié),其中,n為自然數(shù),可執(zhí)行文件為終端操作系統(tǒng)的可執(zhí)行文件。
上述的終端可以為移動(dòng)終端,也可以為計(jì)算機(jī)終端。上述的終端上可以安裝有操作系統(tǒng),上述實(shí)施例中的操作系統(tǒng)可以為安卓操作系統(tǒng)、windows操作系統(tǒng)以及ios操作系統(tǒng)等。
可選地,上述的預(yù)設(shè)位置可以為打開(kāi)的子文件二進(jìn)制的前4個(gè)字節(jié)。
可選地,程序文件包含了應(yīng)用程序(如上述的待檢測(cè)程序)的二進(jìn)制代碼、資源文件以及應(yīng)用全局配置文件等。在得到程序文件的多個(gè)子文件時(shí),可以通過(guò)二進(jìn)制打開(kāi)方式打開(kāi)子文件,子文件的特征信息則使用二進(jìn)制代碼的格式表示。舉例說(shuō)明,每個(gè)子文件的特征信息可以用16個(gè)字節(jié)的信息表示,選用16個(gè)字節(jié)的前4個(gè)字節(jié)表示子文件的標(biāo)識(shí)符字段,即通過(guò)前4個(gè)字節(jié)標(biāo)識(shí)子文件的類型。如,提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001010,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780a(0x),而dex文件的文件特征為6465780a(0x),則該子文件為dex文件;提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001100,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780c(0x),而dex文件的文件特征為6465780c(0x),則該子文件為壓縮包文件;提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001110,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780e(0x),而dex文件的文件特征為6465780e(0x),則該子文件為apk文件。
在上述實(shí)施例中,采用二進(jìn)制的打開(kāi)方式打開(kāi)程序包的子文件,并通過(guò)二進(jìn)制代碼信息標(biāo)識(shí)子文件的類型,以判斷出每個(gè)子文件的類型,該方案采用二進(jìn)制代碼,信息標(biāo)識(shí)方式簡(jiǎn)潔明了,且容易識(shí)別。
在本申請(qǐng)的上述實(shí)施例中,基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件包括:依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配;若當(dāng)前匹配的子文件的文件特征與預(yù)定特征一致,則確定當(dāng)前匹配的子文件為可執(zhí)行文件。
進(jìn)一步地,在依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配之后,該方法還包括:若當(dāng)前匹配的子文件的文件特征與預(yù)定特征不一致,則判斷當(dāng)前匹配的子文件的文件特征是否與壓縮文件的文件特征一致;若當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征一致,則判斷出當(dāng)前匹配的子文件為壓縮文件,并重新提取每個(gè)子文件的文件特征信息。
下面結(jié)合圖3詳述本申請(qǐng)的上述實(shí)施例,如圖3所示,該實(shí)施例可以包括如下步驟:
步驟s301:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件。
步驟s302:提取子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征。
其中,提取子文件的文件特征信息的方式與上述實(shí)施例的方式一致,在此不再贅述。
需要說(shuō)明的是,每個(gè)子文件的文件特征信息都用于標(biāo)識(shí)文件特征,該文件特征信息可以使用文件的類型字段、版本字段標(biāo)識(shí)該文件的類型。子文件可以包括dex文件、壓縮包文件和apk文件等類型,每種類型的子文件對(duì)應(yīng)不同的文件特征。
步驟s303:按照子文件的文件特征與預(yù)定特征進(jìn)行匹配。
具體地,上述的預(yù)定特征可以為dex文件的文件特征,如dex文件的標(biāo)識(shí)符字段。可選地,通過(guò)子文件二進(jìn)制的前4個(gè)字節(jié)表示子文件的標(biāo)識(shí)符字段,如dex文件的二進(jìn)制信息表示為十六進(jìn)制的信息為6465780a(0x)。
將提取到的子文件二進(jìn)制的前四個(gè)字節(jié)信息與預(yù)先定義的dex文件的文件特征進(jìn)行匹配。
步驟s304:判斷當(dāng)前匹配的子文件的文件特征是否與預(yù)定特征一致。
若判斷出當(dāng)前匹配的子文件的文件特征與預(yù)定特征一致,也即提取到的當(dāng)前匹配的子文件二進(jìn)制的前四個(gè)字節(jié)的信息為01100100011001010111100000001010,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780a(0x),與預(yù)先定義的dex文件的文件特征一致,則執(zhí)行步驟s305;若判斷出當(dāng)前匹配的子文件的文件特征與預(yù)定特征不一 致,也即提取到的當(dāng)前匹配的子文件的文件特征不為6465780a(0x),則執(zhí)行步驟s306。
步驟s305:判斷出當(dāng)前匹配的子文件為dex文件。
可選地,當(dāng)判斷出當(dāng)前匹配的子文件的標(biāo)識(shí)符字段與dex文件的標(biāo)識(shí)符字段一致,時(shí),確定當(dāng)前匹配的子文件為dex文件,dex文件即為可執(zhí)行文件。
步驟s306:判斷當(dāng)前匹配的子文件的文件特征是否與壓縮文件的文件特征一致。
若判斷出當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征一致,也即提取到的當(dāng)前匹配的子文件二進(jìn)制的前四個(gè)字節(jié)的信息為01100100011001010111100000001100,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780c(0x),與預(yù)先定義的壓縮文件的文件特征一致,則執(zhí)行步驟s307;若判斷出當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征不一致,則返回執(zhí)行步驟s302。
步驟s307:判斷出當(dāng)前匹配的子文件為壓縮文件。
具體地,在判斷出當(dāng)前匹配的子文件為壓縮文件之后,返回執(zhí)行步驟s302。
具體地,當(dāng)確定當(dāng)前匹配的子文件為壓縮文件時(shí),需要對(duì)該壓縮文件重新進(jìn)行解壓,并得到解壓后的程序文件,程序文件中可以包括多個(gè)子文件,利用漏洞掃描系統(tǒng)遍歷所有的子文件,并提取每個(gè)子文件的文件特征信息,根據(jù)每個(gè)文件特征信息的文件特征判斷子文件的類型。
以判斷出的當(dāng)前匹配的子文件為壓縮文件為例,詳述本申請(qǐng)實(shí)施例。當(dāng)子文件的二進(jìn)制前4個(gè)字節(jié)的標(biāo)識(shí)符字段與壓縮文件的文件特征的標(biāo)識(shí)符字段相同時(shí),例如,當(dāng)前匹配的子文件的前4位標(biāo)識(shí)符字段為預(yù)先定義的壓縮文件的標(biāo)識(shí)符字段6465780c(0x)時(shí),則當(dāng)前匹配的子文件的文件特征信息匹配到一個(gè)壓縮文件。在確定當(dāng)前匹配的子文件為壓縮文件之后,則需要通過(guò)解壓工具重新解壓該壓縮文件,解壓后的程序文件中可以包括多個(gè)子文件,通過(guò)漏洞掃描系統(tǒng)可以提取這多個(gè)子文件的文件特征(如,子文件的標(biāo)識(shí)符字段),并可以通過(guò)每個(gè)子文件的標(biāo)識(shí)符字段,判斷出子文件中的所有可執(zhí)行文件。
以判斷出的當(dāng)前匹配的子文件為apk文件為例,詳述本申請(qǐng)實(shí)施例。apk文件,實(shí)際也是一個(gè)zip格式的壓縮文件,只是后綴名為apk。同樣通過(guò)子文件的標(biāo)識(shí)符字段,判斷當(dāng)前匹配的子文件是否為apk文件。具體地,當(dāng)前匹配的子文件的二進(jìn)制前4個(gè)字節(jié)的標(biāo)識(shí)符字段與apk文件的文件特征的標(biāo)識(shí)符字段相同時(shí),例如,當(dāng)前匹配的子文件的前4位標(biāo)識(shí)符字段為預(yù)先定義的apk文件的標(biāo)識(shí)符字段6465780e(0x)時(shí),則當(dāng)前匹配的子文件的文件特征信息匹配到一個(gè)apk文件。在確定當(dāng)前匹配的子文件 為apk文件之后,則需要通過(guò)解壓工具重新解壓該apk文件,解壓后的程序文件中可以包括多個(gè)子文件,通過(guò)漏洞掃描系統(tǒng)可以提取這多個(gè)子文件的文件特征(如,子文件的標(biāo)識(shí)符字段),并可以通過(guò)每個(gè)子文件的標(biāo)識(shí)符字段,判斷出子文件中的所有可執(zhí)行文件。
通過(guò)上述實(shí)施例,由于采用文件特征對(duì)比的方式,可以遍歷所有的子文件,并在提取每個(gè)子文件的文件特征信息之后,可以根據(jù)文件特征判斷出多個(gè)子文件中的所有可執(zhí)行文件,并對(duì)不是可執(zhí)行文件的每個(gè)文件,重新進(jìn)行解壓,因此通過(guò)上述方案,可以遍歷所有的子文件,得到所有的可執(zhí)行文件,不會(huì)發(fā)生漏掉可執(zhí)行文件的情況,從而可以找出應(yīng)用程序中包括隱藏的所有可執(zhí)行文件,使漏洞查找的效果最大化。
在本申請(qǐng)的上述實(shí)施例中,獲取待檢測(cè)程序的程序文件包括:獲取待檢測(cè)程序的安裝程序包;對(duì)安裝程序包進(jìn)行解壓縮,得到程序文件。
具體地,利用漏洞掃描系統(tǒng)中的解壓工具,將待檢測(cè)程序的安裝程序包進(jìn)行解壓縮,解壓后的程序文件包括了組成待檢測(cè)程序的所有文件,即程序文件包括多個(gè)子文件,這些子文件可以為可執(zhí)行文件格式(如.dex格式的文件),也可以為壓縮文件格式(如.exe格式的文件或者.apk格式的文件)。
通過(guò)上述實(shí)施例,利用解壓工具,將待檢測(cè)程序進(jìn)行解壓,可以得到漏洞掃描系統(tǒng)能夠進(jìn)行漏洞查找的可編譯文件,即可執(zhí)行文件,從而通過(guò)得到的可執(zhí)行文件,以方便對(duì)待檢測(cè)程序進(jìn)行漏洞查找。
在本申請(qǐng)的上述實(shí)施例中,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描包括:對(duì)子文件進(jìn)行反編譯,得到反編譯語(yǔ)句;利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
具體地,對(duì)提取的每個(gè)子文件的文件特征進(jìn)行匹配之后,得到匹配的多個(gè)子文件中的所有可執(zhí)行文件。利用安裝在終端上的漏洞掃描系統(tǒng)中的反編譯工具,將可執(zhí)行文件的源文件和資源文件進(jìn)行反編譯,如通過(guò)smali語(yǔ)法,經(jīng)過(guò)反編譯后,得到反編譯語(yǔ)句smali語(yǔ)句。
在一種可選的實(shí)施例中,通過(guò)反編譯語(yǔ)句得到可執(zhí)行文件的控制流圖;判斷控制流圖中記錄的反編譯語(yǔ)句中是否存在漏洞特征語(yǔ)句,若反編譯語(yǔ)句中不存在漏洞特征語(yǔ)句,則表示該可執(zhí)行文件不存在漏洞,不需要進(jìn)入漏洞查找狀態(tài);若從反編譯語(yǔ)句中查找到漏洞特征語(yǔ)句,則進(jìn)入漏洞查找狀態(tài),進(jìn)一步在漏洞查找狀態(tài)中查找漏洞。在漏洞查找狀態(tài)中,若掃描到漏洞,則生成漏洞信息,該漏洞信息中可以包括漏洞名稱、漏洞發(fā)生位置等信息。將生成的漏洞信息顯示在終端屏幕上用于顯示漏洞掃描系統(tǒng)的界面上。
以程序文件apk為例,詳述本申請(qǐng)實(shí)施例。程序文件apk中的可執(zhí)行文件為dex文件。使用apk編譯工具將程序文件apk中的所有dex文件進(jìn)行反編譯,得到記錄有dex文件的反編譯語(yǔ)句的smali文件。通過(guò)反編譯語(yǔ)句得到dex文件的控制流圖;判斷控制流圖中記錄的反編譯語(yǔ)句中是否存在漏洞特征語(yǔ)句,若反編譯語(yǔ)句中不存在漏洞特征語(yǔ)句,則表示該dex文件不存在漏洞,不需要進(jìn)入漏洞查找狀態(tài);則繼續(xù)進(jìn)行下一個(gè)dex文件的漏洞檢測(cè)掃描,若從反編譯語(yǔ)句中查找到漏洞特征語(yǔ)句,則進(jìn)入漏洞查找狀態(tài),進(jìn)一步在漏洞查找狀態(tài)中查找漏洞。在漏洞查找狀態(tài)中,若掃描到漏洞,則生成漏洞信息,該漏洞信息中可以包括漏洞名稱、漏洞發(fā)生位置等信息。將生成的漏洞信息顯示在終端屏幕上用于顯示漏洞掃描系統(tǒng)的界面上。
按照上述的漏洞查找的方案,對(duì)程序文件apk中所有的dex文件進(jìn)行漏洞檢測(cè)掃描,得到程序文件apk中可能存在的所有漏洞。
通過(guò)上述實(shí)施例,對(duì)查找到的所有的可執(zhí)行文件進(jìn)行漏洞檢測(cè)掃描,從而可以實(shí)現(xiàn)對(duì)待檢測(cè)程序的全面掃描,以提高漏洞檢測(cè)的精度。
下面結(jié)合圖4詳述本申請(qǐng)實(shí)施例,如圖4所示,該實(shí)施例可以包括如下步驟:
步驟s401:解壓待檢測(cè)程序包apk。
具體地,利用漏洞掃描系統(tǒng)中的解壓工具,將程序包apk進(jìn)行解壓縮,解壓后的程序文件包括了組成程序包apk的所有文件,即程序文件包括多個(gè)子文件,這些子文件可以為可執(zhí)行文件格式(如.dex格式的文件),也可以為壓縮文件格式(如.exe格式的文件或者.apk格式的文件)。
步驟s402:遍歷解壓后的所有子文件。
具體地,利用漏洞掃描系統(tǒng)遍歷程序包apk解壓后的所有子文件。
步驟s403:提取每個(gè)子文件的文件特征信息。
具體地,依次提取每個(gè)子文件的文件特征信息,文件特征信息可以為子文件的標(biāo)識(shí)符字段、子文件的版本字段等信息。如,當(dāng)文件特征信息為子文件的標(biāo)識(shí)符字段時(shí),采用二進(jìn)制方式打開(kāi)每個(gè)子文件的文件特征信息,則每個(gè)子文件的文件特征信息按照二進(jìn)制代碼的格式表示,并可以通過(guò)二進(jìn)制代碼中的前四個(gè)字節(jié)表示子文件的標(biāo)識(shí)符字段信息。
步驟s404:利用每個(gè)子文件的文件特征信息,判斷每個(gè)子文件的文件類型。
具體地,每個(gè)子文件可以為dex文件、壓縮包文件和apk文件等類型。
可選地,通過(guò)預(yù)先定義,當(dāng)前四個(gè)字節(jié)的二進(jìn)制表示為十六進(jìn)制為6465780a(0x)時(shí),標(biāo)識(shí)子文件為dex文件;當(dāng)前四個(gè)字節(jié)的二進(jìn)制表示為十六進(jìn)制為6465780c(0x)時(shí),標(biāo)識(shí)子文件為壓縮包文件;當(dāng)前四個(gè)字節(jié)的二進(jìn)制表示為十六進(jìn)制為6465780e(0x)時(shí),標(biāo)識(shí)子文件為apk文件。若提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780a(0x)時(shí),則執(zhí)行步驟s405;若提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780c(0x)時(shí),則執(zhí)行步驟s406;若提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780e(0x)時(shí),則執(zhí)行步驟s407。
步驟s405:判斷出當(dāng)前匹配的子文件為dex文件。
具體地,當(dāng)前匹配的子文件的文件特征與預(yù)先定義的dex文件的文件特征一致,即提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780a(0x),則該子文件匹配dex文件的文件特征,判斷出當(dāng)前匹配的子文件為dex文件,并在確定當(dāng)前匹配的子文件為dex文件之后,執(zhí)行步驟s408。
可選地,該步驟中當(dāng)前匹配的子文件也可以為odex文件,odex文件也是程序包apk中的可執(zhí)行文件,是將dex文件進(jìn)行優(yōu)化后的可執(zhí)行文件,odex文件的文件特征與dex文件的文件特征基本一致,因此確定方式與dex文件相同,在此不再贅述。
步驟s406:判斷出當(dāng)前匹配的子文件為壓縮包文件。
具體地,當(dāng)前匹配的子文件的文件特征與預(yù)先定義的壓縮包文件的文件特征一致,即提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780c(0x),則該子文件匹配壓縮包文件的文件特征,判斷出當(dāng)前匹配的子文件為壓縮包文件,并在確定當(dāng)前匹配的子文件為壓縮包文件之后,執(zhí)行步驟s410。
步驟s407:判斷出當(dāng)前匹配的子文件為apk文件。
具體地,當(dāng)前匹配的子文件的文件特征與預(yù)先定義的apk文件的文件特征一致,即提取到的當(dāng)前匹配的子文件的前四個(gè)字節(jié)的十六進(jìn)制為6465780e(0x),則該子文件匹配apk文件的文件特征,判斷出當(dāng)前匹配的子文件為apk文件,并在確定當(dāng)前匹配的子文件為apk文件之后,執(zhí)行步驟s411。
步驟s408:記錄當(dāng)前匹配的dex文件的文件特征信息。
具體地,dex文件的文件特征信息可以包括簽名信息、資源文件信息、二進(jìn)制資源文件信息以及應(yīng)用程序的名字、版權(quán)等信息。
步驟s409:對(duì)當(dāng)前匹配的dex文件進(jìn)行反編譯,利用反編譯語(yǔ)句進(jìn)行漏洞檢測(cè)掃描。
具體地,使用apk編譯工具將程序文件apk中的所有dex文件進(jìn)行反編譯,得到記錄有dex文件的反編譯語(yǔ)句的smali文件。通過(guò)反編譯語(yǔ)句得到dex文件的控制流圖;判斷控制流圖中記錄的反編譯語(yǔ)句中是否存在漏洞特征語(yǔ)句,若反編譯語(yǔ)句中不存在漏洞特征語(yǔ)句,則表示該dex文件不存在漏洞,不需要進(jìn)入漏洞查找狀態(tài);若從反編譯語(yǔ)句中查找到漏洞特征語(yǔ)句,則進(jìn)入漏洞查找狀態(tài),進(jìn)一步在漏洞查找狀態(tài)中查找漏洞。在漏洞查找狀態(tài)中,若掃描到漏洞,則生成漏洞信息,該漏洞信息中可以包括漏洞名稱、漏洞發(fā)生位置等信息。將生成的漏洞信息顯示在終端屏幕上用于顯示漏洞掃描系統(tǒng)的界面上。
步驟s410:提取出當(dāng)前匹配的壓縮包文件。
具體地,在提取出當(dāng)前匹配的壓縮包文件之后,返回步驟s401。
步驟s411:提取出當(dāng)前匹配的apk文件。
具體地,在提取出當(dāng)前匹配的apk文件之后,返回步驟s401。
在上述實(shí)施例中,利用漏洞掃描系統(tǒng)中的解壓工具,將程序包apk進(jìn)行解壓,得到組成程序包apk的多個(gè)子文件,并遍歷解壓后的所有子文件;在遍歷每個(gè)子文件的過(guò)程中,提取每個(gè)子文件的文件特征信息,如提取出每個(gè)子文件二進(jìn)制的前四個(gè)字節(jié)的信息,并將該信息與預(yù)先定義的dex文件(即可執(zhí)行文件)的文件特征進(jìn)行匹配,若當(dāng)前匹配的子文件與dex文件的文件特征一致,則確定該子文件為dex文件;在判斷出多個(gè)子文件中的所有dex文件之后,并記錄dex文件的文件特征信息,利用漏洞掃描系統(tǒng)對(duì)查找到的所有dex文件進(jìn)行漏洞檢測(cè)掃描;若當(dāng)前匹配的子文件與dex文件的文件特征不一致,則判斷提取到的當(dāng)前匹配的子文件二進(jìn)制的前四個(gè)字節(jié)的信息是否與預(yù)先定義的壓縮文件的文件特征是否一致,若一致,則確定當(dāng)前匹配的子文件為一個(gè)壓縮文件,則需要對(duì)該壓縮文件重新進(jìn)行解壓,若不一致,則判斷出當(dāng)期匹配的子文件為一個(gè)apk文件,并需要對(duì)該apk文件重新進(jìn)行解壓。
通過(guò)本申請(qǐng)的上述實(shí)施例,將待檢測(cè)程序進(jìn)行解壓,得到待檢測(cè)程序的多個(gè)子文件,利用漏洞掃描系統(tǒng)遍歷并提取多個(gè)子文件的文件特征,并通過(guò)預(yù)先定義的文件特征判斷每個(gè)子文件的類型,自動(dòng)找到待檢測(cè)程序中的所有可執(zhí)行文件,包括隱藏的可執(zhí)行文件,從而對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,解決了現(xiàn)有的漏洞檢測(cè)精度低的問(wèn)題。
需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù) 人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本申請(qǐng)的技術(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、磁碟、光盤(pán))中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)每個(gè)實(shí)施例所述的方法。
實(shí)施例2
根據(jù)本申請(qǐng)實(shí)施例,還提供了一種基于文件的漏洞檢測(cè)裝置的實(shí)施例,如圖5所示,該裝置可以包括:獲取模塊50、提取模塊52、確定模塊54和掃描模塊56。
其中,獲取模塊50,用于獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件。
提取模塊52,用于提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征。
確定模塊54,用于基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件。
掃描模塊56,用于在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
采用本申請(qǐng)實(shí)施例,基于待檢測(cè)程序中每個(gè)子文件的文件特征,查找待檢測(cè)程序的程序文件中的可執(zhí)行文件(如dex文件),并利用確定的所有可執(zhí)行文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。通過(guò)上述實(shí)施例,可以查找到待檢測(cè)程序的程序文件中所有可執(zhí)行文件,包括主可執(zhí)行文件和子可執(zhí)行文件,并對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,從而解決了現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
上述的待檢測(cè)程序的程序文件可以為apk,該待檢測(cè)程序可以為即時(shí)通訊應(yīng)用程序、定位程序,在待檢測(cè)程序的程序文件中可以包括多個(gè)dex文件,dex文件為上述的可執(zhí)行文件。對(duì)待檢測(cè)程序進(jìn)行漏洞查找時(shí),可以通過(guò)apk編譯工具將待檢測(cè)程序的apk(該apk中可以包括源文件和資源文件)進(jìn)行反編譯,得到反編譯語(yǔ)句(如通 過(guò)smali語(yǔ)法得到的smali文件中的語(yǔ)句),并利用反編譯語(yǔ)句進(jìn)行漏洞查找。
上述的可執(zhí)行文件指的是可以由操作系統(tǒng)進(jìn)行加載執(zhí)行的文件。在不同的操作系統(tǒng)環(huán)境下,可執(zhí)行程序的呈現(xiàn)方式不一樣。如,在windows操作系統(tǒng)下,可執(zhí)行文件可以是.exe文件,也可以是.sys文件;另外,可執(zhí)行文件還可以是flash、bat、dex等格式,對(duì)應(yīng)于安卓操作系統(tǒng),可執(zhí)行文件為dex文件。
上述實(shí)施例中的程序文件apk可以通過(guò)打包工具將dex文件(.dex格式的文件)、資源文件(.arsc格式的文件)以及應(yīng)用全局配置文件(.xml格式的文件)打包得到,通過(guò)在終端中直接運(yùn)行該apk以實(shí)現(xiàn)待檢測(cè)程序的安裝,可選地,可以使用終端上的android模擬器運(yùn)行該apk。
其中,apk文件實(shí)際是一個(gè)zip格式的壓縮包,但后綴名被修改為apk,可以通過(guò)解壓工具(如unzip解壓)對(duì)程序文件apk進(jìn)行解壓,在解壓后,可以得到多個(gè)子文件,該多個(gè)子文件中可以包括dex文件,dex文件是dalvik字節(jié)碼的可執(zhí)行程序,每個(gè)程序文件apk中都包含一個(gè)或者多個(gè)dex文件。
上述的dex文件的文件結(jié)構(gòu)可以包括meta-inf目錄、res目錄(存放資源文件的目錄)、manifest.xml(程序全局配置文件)、classes.dex(dalvik字節(jié)碼)、resourcs.arsc。其中,meta-inf目錄下存放的是簽名信息,用來(lái)保證程序包的完整性和系統(tǒng)的安全;res目錄存放資源文件;manifest.xml用于描述應(yīng)用程序的名字、版本、權(quán)限、引用的庫(kù)文件等信息;classes.dex是java源代碼編譯后生成的java字節(jié)碼文件;resourcs.arsc存放編譯后的二進(jìn)制資源文件。
上述的終端可以為移動(dòng)終端,如智能手機(jī)、平板電腦等。
在上述實(shí)施例中,依次提取apk安裝程序中的每個(gè)子文件的文件特征,每個(gè)子文件中的文件特征信息都用于標(biāo)識(shí)文件特征,該文件特征信息可以使用文件的類型字段、版本字段標(biāo)識(shí)該文件的類型。
根據(jù)本申請(qǐng)的上述實(shí)施例,通過(guò)安裝在終端上的漏洞掃描系統(tǒng)對(duì)應(yīng)用程序進(jìn)行漏洞查找時(shí),首先通過(guò)漏洞掃描系統(tǒng)中的解壓工具解壓應(yīng)用程序的程序包,得到程序包中的多個(gè)子文件;其次通過(guò)漏洞掃描系統(tǒng)提取每個(gè)子文件的文件特征,并基于每個(gè)子文件的文件特征判斷其是否為可執(zhí)行文件,查找出多個(gè)子文件中的所有可執(zhí)行文件,并對(duì)所有的可執(zhí)行文件進(jìn)行反編譯,得到反編譯語(yǔ)句,利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
在本申請(qǐng)的上述實(shí)施例中,如圖6所示,提取模塊52包括:讀取子模塊521,用于按照預(yù)設(shè)方式打開(kāi)每個(gè)子文件,并從打開(kāi)的子文件的預(yù)定位置讀取文件特征信息。
進(jìn)一步地,預(yù)設(shè)方式包括二進(jìn)制打開(kāi)方式,預(yù)定位置包括打開(kāi)的子文件的前n個(gè)字節(jié),其中,n為自然數(shù),可執(zhí)行文件為終端操作系統(tǒng)的可執(zhí)行文件。
上述的終端可以為移動(dòng)終端,也可以為計(jì)算機(jī)終端。上述的終端上可以安裝有操作系統(tǒng),上述實(shí)施例中的操作系統(tǒng)可以為安卓操作系統(tǒng)、windows操作系統(tǒng)以及ios操作系統(tǒng)等。
可選地,上述的預(yù)設(shè)位置可以為打開(kāi)的子文件二進(jìn)制的前4個(gè)字節(jié)。
可選地,程序文件包含了應(yīng)用程序(如上述的待檢測(cè)程序)的二進(jìn)制代碼、資源文件以及應(yīng)用全局配置文件等。在得到程序文件的多個(gè)子文件時(shí),可以通過(guò)二進(jìn)制打開(kāi)方式打開(kāi)子文件,子文件的特征信息則使用二進(jìn)制代碼的格式表示。舉例說(shuō)明,每個(gè)子文件的特征信息可以用16個(gè)字節(jié)的信息表示,選用16個(gè)字節(jié)的前4個(gè)字節(jié)表示子文件的標(biāo)識(shí)符字段,即通過(guò)前4個(gè)字節(jié)標(biāo)識(shí)子文件的類型。如,提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001010,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780a(0x),而dex文件的文件特征為6465780a(0x),則該子文件為dex文件;提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001100,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780c(0x),而dex文件的文件特征為6465780c(0x),則該子文件為壓縮包文件;提取到的四個(gè)字節(jié)的信息為01100100011001010111100000001110,該二進(jìn)制信息表示為16進(jìn)制的信息為6465780e(0x),而dex文件的文件特征為6465780e(0x),則該子文件為apk文件。
在上述實(shí)施例中,采用二進(jìn)制的打開(kāi)方式打開(kāi)程序包的子文件,并通過(guò)二進(jìn)制代碼信息標(biāo)識(shí)子文件的類型,以判斷出每個(gè)子文件的類型,該方案采用二進(jìn)制代碼,信息標(biāo)識(shí)方式簡(jiǎn)潔明了,且容易識(shí)別。
在本申請(qǐng)的上述實(shí)施例中,如圖7所示,確定模塊54包括:匹配子模塊541,用于依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配;確定子模塊543,用于若當(dāng)前匹配的子文件的文件特征與預(yù)定特征一致,則確定當(dāng)前匹配的子文件為可執(zhí)行文件。
進(jìn)一步地,如圖8所示,上述裝置還可以包括:判斷模塊81,用于在依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配之后,若當(dāng)前匹配的子文件的文件特征與預(yù)定特征不一致,則判斷當(dāng)前匹配的子文件的文件特征是否與壓縮文件的文件特征一致;處理模塊83,用于若當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征一致,則判斷出當(dāng)前匹配的子文件為壓縮文件,并重新提取每個(gè)子文件的文件特征信息。
在上述實(shí)施例中,利用漏洞掃描系統(tǒng)中的解壓工具,將程序包apk進(jìn)行解壓,得到組成程序包apk的多個(gè)子文件,并遍歷解壓后的所有子文件;在遍歷每個(gè)子文件的 過(guò)程中,提取每個(gè)子文件的文件特征信息,如提取出每個(gè)子文件二進(jìn)制的前四個(gè)字節(jié)的信息,并將該信息與預(yù)先定義的dex文件(即可執(zhí)行文件)的文件特征進(jìn)行匹配,若當(dāng)前匹配的子文件與dex文件的文件特征一致,則確定該子文件為dex文件;在判斷出多個(gè)子文件中的所有dex文件之后,并記錄dex文件的文件特征信息,利用漏洞掃描系統(tǒng)對(duì)查找到的所有dex文件進(jìn)行漏洞檢測(cè)掃描;若當(dāng)前匹配的子文件與dex文件的文件特征不一致,則判斷提取到的當(dāng)前匹配的子文件二進(jìn)制的前四個(gè)字節(jié)的信息是否與預(yù)先定義的壓縮文件的文件特征是否一致,若一致,則確定當(dāng)前匹配的子文件為一個(gè)壓縮文件,則需要對(duì)該壓縮文件重新進(jìn)行解壓,若不一致,則判斷出當(dāng)期匹配的子文件為一個(gè)apk文件,并需要對(duì)該apk文件重新進(jìn)行解壓。
通過(guò)上述實(shí)施例,由于采用文件特征對(duì)比的方式,可以遍歷所有的子文件,并在提取每個(gè)子文件的文件特征信息之后,可以根據(jù)文件特征判斷出多個(gè)子文件中的所有可執(zhí)行文件,并對(duì)不是可執(zhí)行文件的每個(gè)文件,重新進(jìn)行解壓,因此通過(guò)上述方案,可以遍歷所有的子文件,得到所有的可執(zhí)行文件,不會(huì)發(fā)生漏掉可執(zhí)行文件的情況,從而可以找出應(yīng)用程序中包括隱藏的所有可執(zhí)行文件,使漏洞查找的效果最大化。
如圖9所示,獲取模塊50包括:獲取子模塊501,用于獲取待檢測(cè)程序的安裝程序包;解壓子模塊503,用于對(duì)安裝程序包進(jìn)行解壓縮,得到程序文件。
具體地,利用漏洞掃描系統(tǒng)中的解壓工具,將待檢測(cè)程序的安裝程序包進(jìn)行解壓縮,解壓后的程序文件包括了組成待檢測(cè)程序的所有文件,即程序文件包括多個(gè)子文件,這些子文件可以為可執(zhí)行文件格式(如.dex格式的文件),也可以為壓縮文件格式(如.exe格式的文件或者.apk格式的文件)。
通過(guò)上述實(shí)施例,利用解壓工具,將待檢測(cè)程序進(jìn)行解壓,可以得到漏洞掃描系統(tǒng)能夠進(jìn)行漏洞查找的可編譯文件,即可執(zhí)行文件,從而通過(guò)得到的可執(zhí)行文件,以方便對(duì)待檢測(cè)程序進(jìn)行漏洞查找。
在本申請(qǐng)的上述實(shí)施例中,掃描模塊包括:反編譯子模塊,用于對(duì)子文件進(jìn)行反編譯,得到反編譯語(yǔ)句;掃描子模塊,用于利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
具體地,對(duì)提取的每個(gè)子文件的文件特征進(jìn)行匹配之后,得到匹配的多個(gè)子文件中的所有可執(zhí)行文件。利用安裝在終端上的漏洞掃描系統(tǒng)中的反編譯工具,將可執(zhí)行文件的源文件和資源文件進(jìn)行反編譯,如通過(guò)smali語(yǔ)法,經(jīng)過(guò)反編譯后,得到反編譯語(yǔ)句smali語(yǔ)句。
在一種可選的實(shí)施例中,通過(guò)反編譯語(yǔ)句得到可執(zhí)行文件的控制流圖;判斷控制 流圖中記錄的反編譯語(yǔ)句中是否存在漏洞特征語(yǔ)句,若反編譯語(yǔ)句中不存在漏洞特征語(yǔ)句,則表示該可執(zhí)行文件不存在漏洞,不需要進(jìn)入漏洞查找狀態(tài);若從反編譯語(yǔ)句中查找到漏洞特征語(yǔ)句,則進(jìn)入漏洞查找狀態(tài),進(jìn)一步在漏洞查找狀態(tài)中查找漏洞。在漏洞查找狀態(tài)中,若掃描到漏洞,則生成漏洞信息,該漏洞信息中可以包括漏洞名稱、漏洞發(fā)生位置等信息。將生成的漏洞信息顯示在終端屏幕上用于顯示漏洞掃描系統(tǒng)的界面上。
通過(guò)上述實(shí)施例,對(duì)查找到的所有的可執(zhí)行文件進(jìn)行漏洞檢測(cè)掃描,從而可以實(shí)現(xiàn)對(duì)待檢測(cè)程序的全面掃描,以提高漏洞檢測(cè)的精度。
實(shí)施例3
本申請(qǐng)的實(shí)施例可以提供一種計(jì)算機(jī)終端,該計(jì)算機(jī)終端可以是計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端設(shè)備。可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端也可以替換為移動(dòng)終端等終端設(shè)備。
可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端可以位于計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)網(wǎng)絡(luò)設(shè)備中的至少一個(gè)網(wǎng)絡(luò)設(shè)備。
在本實(shí)施例中,上述計(jì)算機(jī)終端可以執(zhí)行基于文件的漏洞檢測(cè)方法中以下步驟的程序代碼:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件;提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征;基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件;在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
可選地,圖10是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖10所示,該計(jì)算機(jī)終端a可以包括:一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器101、存儲(chǔ)器103、以及傳輸裝置105。
其中,存儲(chǔ)器可用于存儲(chǔ)軟件程序以及模塊,如本申請(qǐng)實(shí)施例中的基于文件的漏洞檢測(cè)方法和裝置對(duì)應(yīng)的程序指令/模塊,處理器通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的基于文件的漏洞檢測(cè)方法。存儲(chǔ)器可包括高速隨機(jī)存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器可進(jìn)一步包括相對(duì)于處理器遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至終端a。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
處理器可以通過(guò)傳輸裝置調(diào)用存儲(chǔ)器存儲(chǔ)的信息及應(yīng)用程序,以執(zhí)行下述步驟:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件;提取每個(gè)子文件的文 件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征;基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件;在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:提取每個(gè)子文件的文件特征信息包括:按照預(yù)設(shè)方式打開(kāi)每個(gè)子文件,并從打開(kāi)的子文件的預(yù)定位置讀取文件特征信息。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:預(yù)設(shè)方式包括二進(jìn)制打開(kāi)方式,預(yù)定位置包括打開(kāi)的子文件的前n個(gè)字節(jié),其中,n為自然數(shù),可執(zhí)行文件為終端操作系統(tǒng)的可執(zhí)行文件。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件包括:依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配;若當(dāng)前匹配的子文件的文件特征與預(yù)定特征一致,則確定當(dāng)前匹配的子文件為可執(zhí)行文件。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:在依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配之后,方法還包括:若當(dāng)前匹配的子文件的文件特征與預(yù)定特征不一致,則判斷當(dāng)前匹配的子文件的文件特征是否與壓縮文件的文件特征一致;若當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征一致,則判斷出當(dāng)前匹配的子文件為壓縮文件,并重新提取每個(gè)子文件的文件特征信息。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:獲取待檢測(cè)程序的程序文件包括:獲取待檢測(cè)程序的安裝程序包;對(duì)安裝程序包進(jìn)行解壓縮,得到程序文件。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描包括:對(duì)子文件進(jìn)行反編譯,得到反編譯語(yǔ)句;利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
采用本申請(qǐng)實(shí)施例,基于待檢測(cè)程序中每個(gè)子文件的文件特征,查找待檢測(cè)程序的程序文件中的可執(zhí)行文件(如dex文件),并利用確定的所有可執(zhí)行文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。通過(guò)上述實(shí)施例,可以查找到待檢測(cè)程序的程序文件中所有可執(zhí)行文件,包括主可執(zhí)行文件和子可執(zhí)行文件,并對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,從而解決了現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
本領(lǐng)域普通技術(shù)人員可以理解,圖10所示的結(jié)構(gòu)僅為示意,計(jì)算機(jī)終端也可以是智能手機(jī)(如android手機(jī)、ios手機(jī)等)、平板電腦、掌聲電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備 (mobileinternetdevices,mid)、pad等終端設(shè)備。圖10其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端a還可包括比圖10中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖10所示不同的配置。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令終端設(shè)備相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤(pán)、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤(pán)或光盤(pán)等。
實(shí)施例4
本申請(qǐng)的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)。可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于保存上述實(shí)施例一所提供的基于文件的漏洞檢測(cè)方法所執(zhí)行的程序代碼。
可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以位于計(jì)算機(jī)網(wǎng)絡(luò)中計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端中,或者位于移動(dòng)終端群中的任意一個(gè)移動(dòng)終端中。
可選地,在本實(shí)施例中,存儲(chǔ)介質(zhì)被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取待檢測(cè)程序的程序文件,其中,程序文件包括多個(gè)子文件;提取每個(gè)子文件的文件特征信息,其中,文件特征信息用于記錄對(duì)應(yīng)子文件的文件特征;基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件;在確定子文件為可執(zhí)行文件的情況下,利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:提取每個(gè)子文件的文件特征信息包括:按照預(yù)設(shè)方式打開(kāi)每個(gè)子文件,并從打開(kāi)的子文件的預(yù)定位置讀取文件特征信息。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:預(yù)設(shè)方式包括二進(jìn)制打開(kāi)方式,預(yù)定位置包括打開(kāi)的子文件的前n個(gè)字節(jié),其中,n為自然數(shù),可執(zhí)行文件為終端操作系統(tǒng)的可執(zhí)行文件。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:基于文件特征信息所記錄的文件特征,確定子文件是否為可執(zhí)行文件包括:依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配;若當(dāng)前匹配的子文件的文件特征與預(yù)定特征一致,則確定當(dāng)前匹配的子文件為可執(zhí)行文件。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:在依次按照每個(gè)子文件的文件特征與預(yù)定特征進(jìn)行匹配之后,方法還包括:若當(dāng)前匹配的子文件的文件特征與預(yù)定特征不一致,則判斷當(dāng)前匹配的子文件的文件特征是否與壓縮文件的 文件特征一致;若當(dāng)前匹配的子文件的文件特征與壓縮文件的文件特征一致,則判斷出當(dāng)前匹配的子文件為壓縮文件,并重新提取每個(gè)子文件的文件特征信息。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:獲取待檢測(cè)程序的程序文件包括:獲取待檢測(cè)程序的安裝程序包;對(duì)安裝程序包進(jìn)行解壓縮,得到程序文件。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:利用子文件對(duì)待檢測(cè)程序進(jìn)行漏洞掃描包括:對(duì)子文件進(jìn)行反編譯,得到反編譯語(yǔ)句;利用反編譯語(yǔ)句對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。
采用本申請(qǐng)實(shí)施例,基于待檢測(cè)程序中每個(gè)子文件的文件特征,查找待檢測(cè)程序的程序文件中的可執(zhí)行文件(如dex文件),并利用確定的所有可執(zhí)行文件,對(duì)待檢測(cè)程序進(jìn)行漏洞掃描。通過(guò)上述實(shí)施例,可以查找到待檢測(cè)程序的程序文件中所有可執(zhí)行文件,包括主可執(zhí)行文件和子可執(zhí)行文件,并對(duì)所有可執(zhí)行文件進(jìn)行漏洞查找,以實(shí)現(xiàn)對(duì)待檢測(cè)程序中可能存在的漏洞的全面掃描,使漏洞查找的效果最大化,從而解決了現(xiàn)有的漏洞掃描時(shí)不檢測(cè)子dex文件,導(dǎo)致漏洞漏報(bào)的問(wèn)題。
上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本申請(qǐng)的上述實(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í)施例方案的目的。
另外,在本申請(qǐng)各個(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ì)中?;谶@樣的理解,本申請(qǐng)的技術(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í)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤(pán)、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯拢€可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。