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

文件修復(fù)方法及裝置與流程

文檔序號(hào):12600557閱讀:295來(lái)源:國(guó)知局
文件修復(fù)方法及裝置與流程

本申請(qǐng)涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種文件修復(fù)方法及裝置。



背景技術(shù):

隨著互聯(lián)網(wǎng)安全意識(shí)的提升,應(yīng)用程序提供商在發(fā)布某些軟件之前,需要對(duì)該軟件的應(yīng)用程序包進(jìn)行漏洞掃描,然而,程序員在開發(fā)過程中為了某些防止黑客逆向分析保護(hù)的程序,或者某些有意躲避漏洞掃描工具識(shí)別的惡意程序會(huì)對(duì)延遲符號(hào)(lazy_symbol)表中的函數(shù)符號(hào)名進(jìn)行混淆,這些函數(shù)符號(hào)名會(huì)在反匯編中被引用。

如果在這里混淆了函數(shù)符號(hào)名,特別是系統(tǒng)API(Application Programming Interface,應(yīng)用程序編程接口)的符號(hào)名,將導(dǎo)致漏洞掃描工具無(wú)法識(shí)別出系統(tǒng)調(diào)用,從而無(wú)法檢測(cè)出相關(guān)的漏洞,降低了漏洞掃描的有效性及安全性。

針對(duì)上述的問題,目前尚未提出有效的解決方案。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)實(shí)施例提供了一種文件修復(fù)方法及裝置,以至少解決由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

根據(jù)本申請(qǐng)實(shí)施例的一個(gè)方面,提供了一種文件修復(fù)方法,包括:獲取待檢測(cè)的目標(biāo)文件;在確定所述待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從所述待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,所述延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);依據(jù)所述延遲符號(hào)表中的索引號(hào),獲取與所述索引號(hào)對(duì)應(yīng)的原始符號(hào)名;比對(duì)所述函數(shù)符號(hào)名和所述原始符號(hào)名是否相同;在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名,得到修復(fù)后的所述待檢測(cè)的目標(biāo)文件。

根據(jù)本申請(qǐng)實(shí)施例的另一方面,還提供了一種文件修復(fù)裝置,包括:第一獲取單元,用于獲取待檢測(cè)的目標(biāo)文件;提取單元,用于在確定所述待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從所述待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,所述延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);第二獲取單元,用于依據(jù)所述延遲符號(hào)表中的索引號(hào),獲取與所述索引號(hào)對(duì)應(yīng)的原始符號(hào)名;處理單元,用于比對(duì)所 述函數(shù)符號(hào)名和所述原始符號(hào)名是否相同,以及在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名,得到修復(fù)后的所述待檢測(cè)的目標(biāo)文件。

在本申請(qǐng)實(shí)施例中,采用獲取待檢測(cè)的目標(biāo)文件;在確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);依據(jù)延遲符號(hào)表中的索引號(hào),獲取與索引號(hào)對(duì)應(yīng)的原始符號(hào)名;比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同;在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,修正函數(shù)符號(hào)名,得到修復(fù)后的待檢測(cè)的目標(biāo)文件的方式,通過獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下修正函數(shù)符號(hào)名,達(dá)到了對(duì)被混淆的待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),使得漏洞掃描工具能夠?qū)Ρ换煜拇龣z測(cè)的目標(biāo)文件進(jìn)行漏洞掃描的目的,從而實(shí)現(xiàn)了增強(qiáng)文件安全性以及漏洞掃描的有效性的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

附圖說(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是根據(jù)本發(fā)明實(shí)施例的一種運(yùn)行文件修復(fù)方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖;

圖2是根據(jù)本申請(qǐng)實(shí)施例的一種可選的文件修復(fù)方法的流程示意圖;

圖3是根據(jù)本申請(qǐng)實(shí)施例的另一種可選的文件修復(fù)方法的流程示意圖;

圖4是根據(jù)本發(fā)明實(shí)施例的一種可選的文件修復(fù)裝置的結(jié)構(gòu)示意圖;

圖5是根據(jù)本發(fā)明實(shí)施例的另一種可選的文件修復(fù)裝置的結(jié)構(gòu)示意圖;

圖6是根據(jù)本發(fā)明實(shí)施例的一種可選的提取單元的結(jié)構(gòu)示意圖;

圖7是根據(jù)本發(fā)明實(shí)施例的又一種可選的文件修復(fù)裝置的結(jié)構(gòu)示意圖;

圖8是根據(jù)本發(fā)明實(shí)施例的一種可選的第一獲取單元的結(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ù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。

需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送?,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

實(shí)施例1

根據(jù)本申請(qǐng)實(shí)施例,還提供了一種文件修復(fù)方法的方法實(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í)施例的一種文件修復(fù)方法的計(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í)施例中的文件修復(fù)方法對(duì)應(yīng)的程序指令/模塊,處理器102通過運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的應(yīng)用程序的漏洞檢測(cè)方法。存儲(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ǔ)器可以通過網(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ò)適配器(Network Interface Controller,NIC),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置106可以為射頻(Radio Frequency,RF)模塊,其用于通過無(wú)線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝巳鐖D2所示的文件修復(fù)方法。圖2是根據(jù)本申請(qǐng)實(shí)施例一的文件修復(fù)方法的流程圖。

如圖2所示,該文件修復(fù)方法可以包括如下實(shí)現(xiàn)步驟:

步驟S202,獲取待檢測(cè)的目標(biāo)文件。

本申請(qǐng)上述步驟S202中,待檢測(cè)的目標(biāo)文件可以為應(yīng)用程序包中的文件,應(yīng)用程序包可以為iOS應(yīng)用包,文件修復(fù)裝置可以對(duì)應(yīng)用程序包進(jìn)行解壓縮,以獲得上述待檢測(cè)的目標(biāo)文件。其中,該應(yīng)用程序包可以是請(qǐng)求裝置發(fā)送至文件修復(fù)裝置的,該請(qǐng)求裝置可以是手機(jī)客戶端,也可以是計(jì)算機(jī),本實(shí)施例對(duì)此不作限制。

步驟S204,在確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào)。

本申請(qǐng)上述步驟S204中,文件修復(fù)裝置在解壓縮得到上述待檢測(cè)的目標(biāo)文件之后,可以對(duì)待檢測(cè)的目標(biāo)文件是否為具有預(yù)定格式的可執(zhí)行文件進(jìn)行判斷。

以具有預(yù)定格式的可執(zhí)行文件是MACH-O(Mach Object文件格式的縮寫)文件為例,文件修復(fù)裝置判斷待檢測(cè)的目標(biāo)文件是否為MACH-O文件的方法可以包括:讀取待檢測(cè)的目標(biāo)文件的前4個(gè)字節(jié)中的字符;判斷待檢測(cè)的目標(biāo)文件的前4個(gè)字節(jié)是否為MACH-O文件格式定義的魔數(shù)(32位平臺(tái)為0xFEEDFACE、64位平臺(tái)為0xFEEDFACF);若是,則確定待檢測(cè)的目標(biāo)文件是MACH-O文件,反之則確定待檢測(cè)的目標(biāo)文件不是MACH-O文件。

進(jìn)而,在確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,文件修復(fù)裝置可以從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表。其中,延遲符號(hào)表可以包括函數(shù)符號(hào)名以及索引號(hào)。

仍以具有預(yù)定格式的可執(zhí)行文件是MACH-O文件為例,在確定待檢測(cè)的目標(biāo)文件是MACH-O文件的情況下,文件修復(fù)裝置可以從待檢測(cè)的目標(biāo)文件中提取lazy_symbol 表,lazy_symbol表中包括函數(shù)符號(hào)名(也稱引用的符號(hào)名)和索引號(hào),其中,文件修復(fù)裝置如何從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表后續(xù)實(shí)施例中會(huì)進(jìn)行詳細(xì)說(shuō)明,此處不做贅述。

步驟S206,依據(jù)延遲符號(hào)表中的索引號(hào),獲取與索引號(hào)對(duì)應(yīng)的原始符號(hào)名。

本申請(qǐng)上述步驟S206中,文件修復(fù)裝置在提取延遲符號(hào)表之后,可以依據(jù)延遲符號(hào)表中的索引號(hào),獲取與索引號(hào)對(duì)應(yīng)的原始符號(hào)名。由于現(xiàn)有技術(shù)中,某些有意躲避漏洞掃描工具識(shí)別的惡意程序會(huì)對(duì)延遲符號(hào)表中的函數(shù)符號(hào)名進(jìn)行混淆,也就是說(shuō)延遲符號(hào)表中的函數(shù)符號(hào)名是可以被修改的,本申請(qǐng)的文件修復(fù)方法,即是利用不可修改的索引號(hào),獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,由于索引號(hào)不可修改,那么則認(rèn)為上述原始符號(hào)名未被修改過,進(jìn)而,利用原始符號(hào)名對(duì)被修改過的函數(shù)符號(hào)名進(jìn)行修正。

仍以具有預(yù)定格式的可執(zhí)行文件是MACH-O文件為例,文件修復(fù)裝置可以使用Xcode(開發(fā)蘋果應(yīng)用程序的開發(fā)工具,由蘋果公司提供)自帶的工具dyldinfo命令:dyldinfo–lazy_bind<目標(biāo)文件名>,從待檢測(cè)的目標(biāo)文件中獲取動(dòng)態(tài)鏈接庫(kù)名稱、引用的符號(hào)名等。

需要說(shuō)明的是,dyldinfo–lazy_bind命令由蘋果公司提供,該dyldinfo–lazy_bind命令可以輸出MACH-O文件中的lazy綁定的相關(guān)信息:如地址偏移、索引號(hào)、動(dòng)態(tài)鏈接庫(kù)名稱、函數(shù)符號(hào)名,原理是dyldinfo命令會(huì)根據(jù)索引號(hào)獲取其對(duì)應(yīng)的原始符號(hào)名稱。

步驟S208,比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同。

本申請(qǐng)上述步驟S208中,文件修復(fù)裝置在獲取到與索引號(hào)對(duì)應(yīng)的原始符號(hào)名之后,將函數(shù)符號(hào)名與原始符號(hào)名進(jìn)行比對(duì),判斷函數(shù)符號(hào)名和原始符號(hào)名是否相同。

步驟S210,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,修正函數(shù)符號(hào)名,得到修復(fù)后的待檢測(cè)的目標(biāo)文件。

本申請(qǐng)上述步驟S210中,在比對(duì)出函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,文件修復(fù)裝置可以利用原始符號(hào)名對(duì)函數(shù)符號(hào)名進(jìn)行修正。可選地,比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同;在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,修正函數(shù)符號(hào)名,可以包括:重復(fù)執(zhí)行以下操作,直到遍歷完所有函數(shù)符號(hào)名:將第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名進(jìn)行比較;若第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名不相同,則將第i個(gè)函數(shù)符號(hào)名修改為第i個(gè)原始符號(hào)名,其中,i為自然數(shù)。

仍以具有預(yù)定格式的可執(zhí)行文件是MACH-O文件為例,文件修復(fù)裝置將從 lazy_symbol表中獲取到的函數(shù)符號(hào)名記為lst;將從獲取到的與索引號(hào)對(duì)應(yīng)的原始符號(hào)名記為dst;遍歷lst,lst[i]所指向的函數(shù)符號(hào)名不等于dst[i]所指向的原始符號(hào)名,則認(rèn)為該待檢測(cè)的目標(biāo)文件的函數(shù)符號(hào)名被混淆處理過,然后修改該待檢測(cè)的目標(biāo)文件中l(wèi)st[i]所指向的函數(shù)符號(hào)名為dst[i]把指向的原始符號(hào)名,其中,lst[i]表示lst中的第i個(gè)函數(shù)符號(hào)名,dst[i]表示dst中第i個(gè)原始符號(hào)名。

在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,文件修復(fù)裝置修正函數(shù)符號(hào)名,進(jìn)而得到修復(fù)后的待檢測(cè)的目標(biāo)文件。由于本實(shí)施例的文件修復(fù)方法對(duì)被混淆的函數(shù)符號(hào)名進(jìn)行了修正,因此修復(fù)后的待檢測(cè)的目標(biāo)文件不會(huì)出現(xiàn)因函數(shù)符號(hào)名被混淆而導(dǎo)致的漏洞掃描工具無(wú)法識(shí)別出系統(tǒng)調(diào)用,從而無(wú)法檢測(cè)出相關(guān)的漏洞的問題。

由上可知,本申請(qǐng)上述實(shí)施例一所提供的方案,通過獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下修正函數(shù)符號(hào)名,達(dá)到了對(duì)被混淆的待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),使得漏洞掃描工具能夠?qū)Ρ换煜拇龣z測(cè)的目標(biāo)文件進(jìn)行漏洞掃描的目的,從而實(shí)現(xiàn)了增強(qiáng)文件安全性以及漏洞掃描的有效性的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

作為一種可選的實(shí)現(xiàn)方式,上述步驟S208,比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同;步驟S210,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,修正函數(shù)符號(hào)名,可以包括:

步驟S10,重復(fù)執(zhí)行以下操作,直到遍歷完所有函數(shù)符號(hào)名:將第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名進(jìn)行比較;若第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名不相同,則將第i個(gè)函數(shù)符號(hào)名修改為第i個(gè)原始符號(hào)名,其中,i為自然數(shù)。

本申請(qǐng)上述步驟S10中,文件修復(fù)裝置可以對(duì)函數(shù)符號(hào)名和原始符號(hào)名進(jìn)行一一對(duì)比,由于在一個(gè)延遲符號(hào)表中,函數(shù)符號(hào)名和原始符號(hào)名的數(shù)量均為多個(gè),因此文件修復(fù)裝置可以從第1個(gè)函數(shù)符號(hào)名開始與第1個(gè)原始符號(hào)名進(jìn)行比對(duì),若第1個(gè)函數(shù)符號(hào)名與第1個(gè)原始符號(hào)名不相同,則將第1個(gè)函數(shù)符號(hào)名修改為第1個(gè)原始符號(hào)名,再將第2個(gè)函數(shù)符號(hào)名與第2個(gè)原始符號(hào)名進(jìn)行比對(duì),以此類推,直到將多個(gè)函數(shù)符號(hào)名與原始符號(hào)名一一比對(duì)并修正完畢。

需要說(shuō)明的是,上述僅是示例性地對(duì)文件修復(fù)裝置如何比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同的方法進(jìn)行說(shuō)明,文件修復(fù)裝置也可以采用逆序的順序比對(duì)函數(shù)符號(hào)名和原始符號(hào)名,還可以采用預(yù)定的順序比對(duì)函數(shù)符號(hào)名和原始符號(hào)名,均應(yīng)在本實(shí)施例的保護(hù)范圍之內(nèi)。

作為一種可選的實(shí)現(xiàn)方式,確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件,包括:

步驟S20,讀取待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符,n為大于0的整數(shù)。

本申請(qǐng)上述步驟S20中,文件修復(fù)裝置可以對(duì)具有預(yù)定格式的可執(zhí)行文件進(jìn)行修復(fù),那么首先,文件修復(fù)裝置在獲取到待檢測(cè)的目標(biāo)文件之后需要判斷待檢測(cè)的目標(biāo)文件是否為具有預(yù)定格式的可執(zhí)行文件??蛇x地,文件修復(fù)裝置可以讀取待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符。

以具有預(yù)定格式的可執(zhí)行文件是MACH-O文件為例,文件修復(fù)裝置判斷待檢測(cè)的目標(biāo)文件是否為MACH-O文件的方法可以為讀取待檢測(cè)的目標(biāo)文件的前4個(gè)字節(jié)中的字符,進(jìn)而通過該前4個(gè)字節(jié)中的字符進(jìn)行判斷。

步驟S22,判斷字符是否為具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù),其中,魔數(shù)用于指示文件類型。

本申請(qǐng)上述步驟S22中,文件修復(fù)裝置在讀取了待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符之后,可以判斷該字符是否為具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù)。很多類型的文件,其起始的幾個(gè)字節(jié)的內(nèi)容是固定的(或是有意填充,或是本就如此),根據(jù)這幾個(gè)字節(jié)的內(nèi)容就可以確定文件類型,因此這幾個(gè)字節(jié)的內(nèi)容被稱之為魔數(shù)。由于不同類型的文件具有其對(duì)應(yīng)的魔數(shù)(也稱魔術(shù)字),因此本實(shí)施例的文件修復(fù)裝置即是通過判斷待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符是否為具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù),來(lái)判斷待檢測(cè)的目標(biāo)文件是否為具有預(yù)定格式的可執(zhí)行文件。

仍以具有預(yù)定格式的可執(zhí)行文件是MACH-O文件為例,文件修復(fù)裝置通過判斷待檢測(cè)的目標(biāo)文件的前4個(gè)字節(jié)中的字符是否為MACH-O文件格式定義的魔數(shù),來(lái)判斷待檢測(cè)的目標(biāo)文件是否為MACH-O文件(32位平臺(tái)對(duì)應(yīng)的魔數(shù)為0xFEEDFACE、64位平臺(tái)對(duì)應(yīng)的魔數(shù)為0xFEEDFACF);若是,則確定待檢測(cè)的目標(biāo)文件是MACH-O文件,反之則確定待檢測(cè)的目標(biāo)文件不是MACH-O文件。

步驟S24,若字符為魔數(shù),則確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件。

本申請(qǐng)上述步驟S24中,文件修復(fù)裝置通過判斷待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符是否為具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù),在待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符為該具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù)的情況下,確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件。

作為一種可選的實(shí)現(xiàn)方式,從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,可以包括:

步驟S30,對(duì)待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定延遲符號(hào)表在待檢測(cè)的目標(biāo)文件中的偏移量。

本申請(qǐng)上述步驟S30中,文件修復(fù)裝置為了從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,首先需要對(duì)待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定延遲符號(hào)表在待檢測(cè)的目標(biāo)文件中的偏移量。具體地,文件修復(fù)裝置可以依據(jù)待檢測(cè)的目標(biāo)文件的文件頭最終確定延遲符號(hào)表在待檢測(cè)的目標(biāo)文件中的偏移量。

以待檢測(cè)的目標(biāo)文件為MACH-O文件為例,MACH-O文件可以包括加載命令區(qū)、數(shù)據(jù)區(qū)以及具有第一長(zhǎng)度的文件頭,上述的加載命令區(qū)即為L(zhǎng)oad command,數(shù)據(jù)區(qū)可以按照segment來(lái)劃分,segment中又包含了多個(gè)section。

示例性地,MACH-O文件的文件頭格式可以包括:

其中,文件頭后面就是load command區(qū),然后根據(jù)文件頭的ncmds和sizeofcmds字段可以定位后續(xù)所有的load command數(shù)據(jù),進(jìn)而確定延遲符號(hào)表的偏移量。

步驟S32,基于偏移量提取延遲符號(hào)表。

本申請(qǐng)上述步驟S32中,文件修復(fù)裝置通過獲取到的延遲符號(hào)表的偏移量從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表。

可選地,待檢測(cè)的目標(biāo)文件包括加載命令區(qū)、數(shù)據(jù)區(qū)以及具有第一長(zhǎng)度的文件頭;其中,上述步驟S30,對(duì)待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定延遲符號(hào)表在待檢測(cè)的目標(biāo)文件中的偏移量,可以包括:

步驟S40,依據(jù)具有第一長(zhǎng)度的文件頭遍歷加載命令區(qū),在數(shù)據(jù)區(qū)中確定延遲符號(hào)表的偏移量。

本申請(qǐng)上述步驟S40中,文件修復(fù)裝置可以依據(jù)文件頭中的內(nèi)容定位后續(xù)所有的加載命令區(qū)的數(shù)據(jù),進(jìn)而,文件修復(fù)裝置可以依據(jù)遍歷加載命令區(qū),在數(shù)據(jù)區(qū)中確定延遲符號(hào)表的偏移量。

以待檢測(cè)的目標(biāo)文件為MACH-O文件為例,MACH-O文件的Load command格式可以包括:

其中,load_command中的命令類型cmd和整個(gè)命令長(zhǎng)度這兩個(gè)信息是固定格式,都占據(jù)了前8個(gè)字節(jié)。

例如,LC_SEGMENT這條命令,結(jié)構(gòu)如下:

其中,load command里面除了LC_SEGMENT這個(gè)命令,還有LC_ID_DYLIB、LC_DYLD_INFO、LC_SYMTAB等其余20余種command,每個(gè)command都有自己的功能,在此不再贅述。

在LC_SEGMENT里面,根據(jù)LC_SEGMENT的結(jié)構(gòu)的fileoff、nsects可以定位和遍歷所有的segment。由此可知,具體section個(gè)數(shù)由segment結(jié)構(gòu)中的nsects決定。

作為一種可選的實(shí)現(xiàn)方式,如圖3所示,上述步驟S40,依據(jù)具有第一長(zhǎng)度的文件頭遍歷加載命令區(qū),在數(shù)據(jù)區(qū)中確定延遲符號(hào)表的偏移量,可以包括:

步驟S302,將距離待檢測(cè)的目標(biāo)文件的起始位置第一長(zhǎng)度處確定為第一個(gè)加載命令區(qū)的起始位置。

本申請(qǐng)上述步驟S302中,由于待檢測(cè)的目標(biāo)文件的結(jié)構(gòu)由具有第一長(zhǎng)度的文件頭、加載命令區(qū)以及數(shù)據(jù)區(qū)組成,并且加載命令區(qū)就在具有第一長(zhǎng)度的文件頭之后,因此文件修復(fù)裝置首先可以將距離待檢測(cè)的目標(biāo)文件的起始位置第一長(zhǎng)度處確定為第一個(gè)加載命令區(qū)的起始位置。假設(shè)文件頭的長(zhǎng)度為3字節(jié),那么文件修復(fù)裝置則將距離待檢測(cè)的目標(biāo)文件的起始位置3字節(jié)的地方,確定為第一個(gè)加載命令區(qū)的起始位置。

步驟S304,根據(jù)具有第一長(zhǎng)度的文件頭中的ncmds字段,確定加載命令區(qū)的個(gè)數(shù)。

本申請(qǐng)上述步驟S304中,文件修復(fù)裝置在確定了第一個(gè)加載命令區(qū)的起始位置后,需要確定加載命令區(qū)的個(gè)數(shù),通常加載命令區(qū)有多個(gè)(20多個(gè)),文件修復(fù)裝置通過文件頭的ncmds字段來(lái)確定加載命令區(qū)的個(gè)數(shù)。

步驟S306,根據(jù)第一個(gè)加載命令區(qū)的起始位置以及加載命令區(qū)的個(gè)數(shù),確定數(shù)據(jù)區(qū)的起始位置。

本申請(qǐng)上述步驟S306中,文件修復(fù)裝置在確定了第一個(gè)加載命令區(qū)的起始位置以及加載命令區(qū)的個(gè)數(shù)之后,可以根據(jù)第一個(gè)加載命令區(qū)的起始位置以及加載命令區(qū)的個(gè)數(shù),確定每個(gè)加載命令區(qū)的起始位置,由于數(shù)據(jù)區(qū)就在最后一個(gè)加載命令區(qū)之后,因此文件修復(fù)裝置可以確定數(shù)據(jù)區(qū)的起始位置。

以待檢測(cè)的目標(biāo)文件為MACH-O文件為例,MACH-O文件的數(shù)據(jù)區(qū)可以按照segment來(lái)劃分,segment中又包含了多個(gè)section,其中,section的結(jié)構(gòu)可以包括:

步驟S308,從數(shù)據(jù)區(qū)的頭結(jié)構(gòu)中獲取延遲符號(hào)表的偏移量以及延遲符號(hào)表的字節(jié)數(shù)。

本申請(qǐng)上述步驟S308中,文件修復(fù)裝置在確定數(shù)據(jù)區(qū)的起始位置之后,在數(shù)據(jù)區(qū)的頭結(jié)構(gòu)中,獲取延遲符號(hào)表的偏移量以及延遲符號(hào)表的字節(jié)數(shù),以待檢測(cè)的目標(biāo)文件為MACH-O文件為例,在數(shù)據(jù)區(qū)的頭結(jié)構(gòu)(Section Header)中,第56字節(jié)偏移處的4個(gè)字節(jié)為節(jié)類型,如果等于0x7則表示為S_LAZY_SYMBOL_POINTORS,即延遲符號(hào)(lazy symbol)的節(jié)頭,第40字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表在Mach-O文件的偏移,第36字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表的大小(字節(jié)數(shù))。

步驟S310,在距離數(shù)據(jù)區(qū)的起始位置的偏移量處,確定延遲符號(hào)表的起始位置。

本申請(qǐng)上述步驟S310中,文件修復(fù)裝置在獲取延遲符號(hào)表的偏移量以及延遲符號(hào)表的字節(jié)數(shù)之后,可以在距離數(shù)據(jù)區(qū)的起始位置的偏移量處,確定延遲符號(hào)表的起始位置,進(jìn)而根據(jù)延遲符號(hào)表的字節(jié)數(shù)獲取延遲符號(hào)表。

其中,基于偏移量提取延遲符號(hào)表,包括:根據(jù)延遲符號(hào)表的起始位置以及延遲符號(hào)表的字節(jié)數(shù),提取延遲符號(hào)表。

下面,以待檢測(cè)的目標(biāo)文件為MACH-O文件,從lazy_symbol(延遲符號(hào))表中獲取函數(shù)符號(hào)名以及索引號(hào)的過程進(jìn)行示例性說(shuō)明:

步驟A、從待檢測(cè)的目標(biāo)文件的起始位置跳到0x1c偏移,即為L(zhǎng)oad Command起始位置。

其中,自Load Command起始位置起讀取8個(gè)字節(jié),前4個(gè)字節(jié)為加載命令類型,后4字節(jié)為該結(jié)構(gòu)的大小。

步驟B、如果加載命令類型為0x1,即為L(zhǎng)C_SEGMENT命令,繼續(xù)讀取48個(gè)字節(jié),為段(Segment)結(jié)構(gòu)。

步驟C、繼續(xù)讀取68個(gè)字節(jié),即為節(jié)頭(Section Header)結(jié)構(gòu)。

其中,在節(jié)頭(Section Header)結(jié)構(gòu)中,第56字節(jié)偏移處的4個(gè)字節(jié)為節(jié)類型,如果等于0x7則表示為S_LAZY_SYMBOL_POINTORS,即延遲符號(hào)(lazy symbol)的節(jié)頭,第40字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表在MACH-O文件的偏移,第36字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表的大小(字節(jié)數(shù))。

步驟D、從延遲符號(hào)表偏移開始讀取延遲符號(hào)表中的數(shù)據(jù),讀取長(zhǎng)度為上述延遲符號(hào)表的大小。

其中,延遲符號(hào)表中每4個(gè)字節(jié)表示一個(gè)符號(hào)。

可選地,讀取符號(hào)表(Symbols)和字符串表(String):在解析Load Command時(shí),如果類型為0x2,即為L(zhǎng)C_SYMTAB命令,然后繼續(xù)讀取16字節(jié),在第0字節(jié)偏移的4字節(jié)為符號(hào)表偏移;在第8字節(jié)偏移的4字節(jié)為字符串表偏移。

讀取動(dòng)態(tài)符號(hào)表(Dynamic Symbol):在解析Load Command時(shí),如果類型為0xB,即為L(zhǎng)C_DYSYMTAB命令,然后繼續(xù)讀取72字節(jié),在第48字節(jié)偏移的4字節(jié)為動(dòng)態(tài)符號(hào)表的文件偏移地址。

步驟E、獲取函數(shù)符號(hào)名。

其中,函數(shù)符號(hào)名的獲取方法如下:

a)將某函數(shù)符號(hào)名在延遲符號(hào)表中的索引號(hào)記為index,然后讀取動(dòng)態(tài)符號(hào)表(Dynamic Symbol)的index位置的值記為index2;

b)在符號(hào)表(Symbols)的index2位置讀取前4字節(jié)值,記為offset;

c)將字符串表偏移加上offset,即可得到函數(shù)符號(hào)名偏移,拿這個(gè)偏移值從MACH-O文件讀取以0x00為截至的若干字節(jié),即為函數(shù)符號(hào)名。

至此,文件修復(fù)裝置從lazy_symbol(延遲符號(hào))表中獲取函數(shù)符號(hào)名以及索引號(hào)。

可選地,本實(shí)施例的文件修復(fù)方法還可以包括:

步驟S50,若第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名不相同,則確定待檢測(cè)的目標(biāo)文件被混淆。

本申請(qǐng)上述步驟S50中,文件修復(fù)裝置不但可以對(duì)待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),還可以在確定待檢測(cè)的目標(biāo)文件被混淆時(shí)進(jìn)行提示。即,文件修復(fù)裝置在判斷出第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名不相同的情況下,則確定待檢測(cè)的目標(biāo)文件被混淆(函數(shù)符號(hào)名被修改),進(jìn)而輸出提示消息。

步驟S52,輸出提示消息,提示消息用于指示待檢測(cè)的目標(biāo)文件被混淆。

本申請(qǐng)上述步驟S52中,文件修復(fù)裝置在確定待檢測(cè)的目標(biāo)文件被混淆之后,可以輸出用于指示待檢測(cè)的目標(biāo)文件被混淆的提示消息,用于標(biāo)記該待檢測(cè)的目標(biāo)文件。 同時(shí),文件修復(fù)裝置也可以在該待檢測(cè)的目標(biāo)文件添加用于指示待檢測(cè)的目標(biāo)文件的標(biāo)識(shí)信息,本實(shí)施例對(duì)此不做限定。

作為一種可選的實(shí)現(xiàn)方式,上述步驟S201,獲取待檢測(cè)的目標(biāo)文件可以包括:

步驟S60,接收請(qǐng)求裝置發(fā)送的應(yīng)用程序包。

本申請(qǐng)上述步驟S60中,文件修復(fù)裝置獲取到的應(yīng)用程序包可以為請(qǐng)求裝置發(fā)送至文件修復(fù)裝置的,該請(qǐng)求裝置可以是手機(jī)客戶端,也可以是計(jì)算機(jī),該應(yīng)用程序包可以是基于iOS系統(tǒng)生成的數(shù)據(jù)包,也可以是基于Mac OS系統(tǒng)生成的數(shù)據(jù)包,本實(shí)施例對(duì)此不做限定。

步驟S62,對(duì)應(yīng)用程序包進(jìn)行解壓縮,得到待檢測(cè)的目標(biāo)文件。

本申請(qǐng)上述步驟S62中,文件修復(fù)裝置在接收到請(qǐng)求裝置發(fā)送應(yīng)用程序包之后,可以對(duì)應(yīng)用程序包進(jìn)行解壓縮,進(jìn)而得到上述待檢測(cè)的目標(biāo)文件。

其中,在待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,待檢測(cè)的目標(biāo)文件為可執(zhí)行文件,請(qǐng)求裝置為基于iOS系統(tǒng)的設(shè)備或基于Mac OS系統(tǒng)的設(shè)備,具有預(yù)定格式的可執(zhí)行文件為MACH-O文件,魔數(shù)為0xFEEDFACE或者0xFEEDFACF。

在本申請(qǐng)實(shí)施例中,采用獲取待檢測(cè)的目標(biāo)文件;在確定待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);依據(jù)延遲符號(hào)表中的索引號(hào),獲取與索引號(hào)對(duì)應(yīng)的原始符號(hào)名;比對(duì)函數(shù)符號(hào)名和原始符號(hào)名是否相同;在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下,修正函數(shù)符號(hào)名,得到修復(fù)后的待檢測(cè)的目標(biāo)文件的方式,通過獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下修正函數(shù)符號(hào)名,達(dá)到了對(duì)被混淆的待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),使得漏洞掃描工具能夠?qū)Ρ换煜拇龣z測(cè)的目標(biāo)文件進(jìn)行漏洞掃描的目的,從而實(shí)現(xiàn)了增強(qiáng)文件安全性以及漏洞掃描的有效性的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

需要說(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í)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。

通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施 例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(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、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述的方法。

實(shí)施例2

根據(jù)本申請(qǐng)實(shí)施例,還提供了一種用于實(shí)施上述方法實(shí)施例的裝置實(shí)施例,本申請(qǐng)上述實(shí)施例所提供的裝置可以在計(jì)算機(jī)終端上運(yùn)行。

圖4是根據(jù)本申請(qǐng)實(shí)施例的文件修復(fù)裝置的結(jié)構(gòu)示意圖。

如圖4所示,該文件修復(fù)裝置可以包括第一獲取單元402、提取單元404、第二獲取單元406以及處理單元408。

其中,第一獲取單元402,用于獲取待檢測(cè)的目標(biāo)文件;提取單元404,用于在確定所述待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從所述待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,所述延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);第二獲取單元406,用于依據(jù)所述延遲符號(hào)表中的索引號(hào),獲取與所述索引號(hào)對(duì)應(yīng)的原始符號(hào)名;處理單元408,用于比對(duì)所述函數(shù)符號(hào)名和所述原始符號(hào)名是否相同,以及在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名,得到修復(fù)后的所述待檢測(cè)的目標(biāo)文件。

由上可知,本申請(qǐng)上述實(shí)施例二所提供的方案,通過獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下修正函數(shù)符號(hào)名,達(dá)到了對(duì)被混淆的待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),使得漏洞掃描工具能夠?qū)Ρ换煜拇龣z測(cè)的目標(biāo)文件進(jìn)行漏洞掃描的目的,從而實(shí)現(xiàn)了增強(qiáng)文件安全性以及漏洞掃描的有效性的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

此處需要說(shuō)明的是,上述第一獲取單元402、提取單元404、第二獲取單元406以及處理單元408對(duì)應(yīng)于實(shí)施例一中的步驟S202至步驟S210,四個(gè)模塊與對(duì)應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場(chǎng)景相同,但不限于上述實(shí)施例一所公開的內(nèi)容。需要說(shuō)明的是,上述模塊作為裝置的一部分可以運(yùn)行在實(shí)施例一提供的計(jì)算機(jī)終端10中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。

可選地,所述處理單元408用于執(zhí)行以下步驟比對(duì)所述函數(shù)符號(hào)名和所述原始符 號(hào)名是否相同,以及在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名:重復(fù)執(zhí)行以下操作,直到遍歷完所有函數(shù)符號(hào)名:將第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名進(jìn)行比較;若所述第i個(gè)函數(shù)符號(hào)名與所述第i個(gè)原始符號(hào)名不相同,則將所述第i個(gè)函數(shù)符號(hào)名修改為所述第i個(gè)原始符號(hào)名,其中,i為自然數(shù)。

可選地,如圖5所示,文件修復(fù)裝置還可以包括確定單元502。

其中,所述確定單元502用于執(zhí)行以下步驟確定所述待檢測(cè)的目標(biāo)文件是所述具有預(yù)定格式的可執(zhí)行文件:讀取所述待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符,n為大于0的整數(shù);判斷所述字符是否為所述具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù),其中,所述魔數(shù)用于指示文件類型;若所述字符為所述魔數(shù),則確定所述待檢測(cè)的目標(biāo)文件是所述具有預(yù)定格式的可執(zhí)行文件。

此處需要說(shuō)明的是,上述確定單元502對(duì)應(yīng)于實(shí)施例一中的步驟S20至步驟S24,該模塊與對(duì)應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場(chǎng)景相同,但不限于上述實(shí)施例一所公開的內(nèi)容。需要說(shuō)明的是,上述模塊作為裝置的一部分可以運(yùn)行在實(shí)施例一提供的計(jì)算機(jī)終端10中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。

可選地,如圖6所示,提取單元404可以包括解析模塊602和提取模塊604。

其中,解析模塊602,用于對(duì)所述待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定所述延遲符號(hào)表在所述待檢測(cè)的目標(biāo)文件中的偏移量;提取模塊604,用于基于所述偏移量提取所述延遲符號(hào)表。

此處需要說(shuō)明的是,上述解析模塊602和提取模塊604對(duì)應(yīng)于實(shí)施例一中的步驟S30至步驟S34,該模塊與對(duì)應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場(chǎng)景相同,但不限于上述實(shí)施例一所公開的內(nèi)容。需要說(shuō)明的是,上述模塊作為裝置的一部分可以運(yùn)行在實(shí)施例一提供的計(jì)算機(jī)終端10中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。

可選地,所述待檢測(cè)的目標(biāo)文件包括加載命令區(qū)、數(shù)據(jù)區(qū)以及具有第一長(zhǎng)度的文件頭;其中,所述解析模塊602用于執(zhí)行以下步驟對(duì)所述待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定所述延遲符號(hào)表在所述待檢測(cè)的目標(biāo)文件中的偏移量:依據(jù)所述具有第一長(zhǎng)度的文件頭遍歷所述加載命令區(qū),在所述數(shù)據(jù)區(qū)中確定所述延遲符號(hào)表的偏移量。

可選地,所述解析模塊602用于執(zhí)行以下步驟依據(jù)所述具有第一長(zhǎng)度的文件頭遍歷所述加載命令區(qū),在所述數(shù)據(jù)區(qū)中確定所述延遲符號(hào)表的偏移量:將距離所述待檢測(cè)的目標(biāo)文件的起始位置所述第一長(zhǎng)度處確定為第一個(gè)加載命令區(qū)的起始位置;根據(jù)所述具有第一長(zhǎng)度的文件頭中的ncmds字段,確定所述加載命令區(qū)的個(gè)數(shù);根據(jù)第一個(gè)加載命令區(qū)的起始位置以及加載命令區(qū)的個(gè)數(shù),確定所述數(shù)據(jù)區(qū)的起始位置;從所 述數(shù)據(jù)區(qū)的頭結(jié)構(gòu)中獲取所述延遲符號(hào)表的偏移量以及所述延遲符號(hào)表的字節(jié)數(shù);在距離所述數(shù)據(jù)區(qū)的起始位置的所述偏移量處,確定所述延遲符號(hào)表的起始位置。

其中,所述提取模塊604用于執(zhí)行以下步驟基于所述偏移量提取所述延遲符號(hào)表:根據(jù)所述延遲符號(hào)表的起始位置以及所述延遲符號(hào)表的字節(jié)數(shù),提取所述延遲符號(hào)表。

下面,以待檢測(cè)的目標(biāo)文件為MACH-O文件,從lazy_symbol(延遲符號(hào))表中獲取函數(shù)符號(hào)名以及索引號(hào)的過程進(jìn)行示例性說(shuō)明:

步驟A、從待檢測(cè)的目標(biāo)文件的起始位置跳到0x1c偏移,即為L(zhǎng)oad Command起始位置。

其中,自Load Command起始位置起讀取8個(gè)字節(jié),前4個(gè)字節(jié)為加載命令類型,后4字節(jié)為該結(jié)構(gòu)的大小。

步驟B、如果加載命令類型為0x1,即為L(zhǎng)C_SEGMENT命令,繼續(xù)讀取48個(gè)字節(jié),為段(Segment)結(jié)構(gòu)。

步驟C、繼續(xù)讀取68個(gè)字節(jié),即為節(jié)頭(Section Header)結(jié)構(gòu)。

其中,在節(jié)頭(Section Header)結(jié)構(gòu)中,第56字節(jié)偏移處的4個(gè)字節(jié)為節(jié)類型,如果等于0x7則表示為S_LAZY_SYMBOL_POINTORS,即延遲符號(hào)(lazy symbol)的節(jié)頭,第40字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表在MACH-O文件的偏移,第36字節(jié)偏移的4個(gè)字節(jié)為延遲符號(hào)表的大小(字節(jié)數(shù))。

步驟D、從延遲符號(hào)表偏移開始讀取延遲符號(hào)表中的數(shù)據(jù),讀取長(zhǎng)度為上述延遲符號(hào)表的大小。

其中,延遲符號(hào)表中每4個(gè)字節(jié)表示一個(gè)符號(hào)。

可選地,讀取符號(hào)表(Symbols)和字符串表(String):在解析Load Command時(shí),如果類型為0x2,即為L(zhǎng)C_SYMTAB命令,然后繼續(xù)讀取16字節(jié),在第0字節(jié)偏移的4字節(jié)為符號(hào)表偏移;在第8字節(jié)偏移的4字節(jié)為字符串表偏移。

讀取動(dòng)態(tài)符號(hào)表(Dynamic Symbol):在解析Load Command時(shí),如果類型為0xB,即為L(zhǎng)C_DYSYMTAB命令,然后繼續(xù)讀取72字節(jié),在第48字節(jié)偏移的4字節(jié)為動(dòng)態(tài)符號(hào)表的文件偏移地址。

步驟E、獲取函數(shù)符號(hào)名。

其中,函數(shù)符號(hào)名的獲取方法如下:

a)將某函數(shù)符號(hào)名在延遲符號(hào)表中的索引號(hào)記為index,然后讀取動(dòng)態(tài)符號(hào)表(Dynamic Symbol)的index位置的值記為index2;

b)在符號(hào)表(Symbols)的index2位置讀取前4字節(jié)值,記為offset;

c)將字符串表偏移加上offset,即可得到函數(shù)符號(hào)名偏移,拿這個(gè)偏移值從MACH-O文件讀取以0x00為截至的若干字節(jié),即為函數(shù)符號(hào)名。

至此,文件修復(fù)裝置從lazy_symbol(延遲符號(hào))表中獲取函數(shù)符號(hào)名以及索引號(hào)。

可選地,所述處理單元408,還用于若所述第i個(gè)函數(shù)符號(hào)名與所述第i個(gè)原始符號(hào)名不相同,則確定所述待檢測(cè)的目標(biāo)文件被混淆。

可選地,如圖7所示,文件修復(fù)裝置還可以包括:輸出單元702。

其中,輸出單元702,用于輸出提示消息,所述提示消息用于指示所述待檢測(cè)的目標(biāo)文件被混淆。

此處需要說(shuō)明的是,上述輸出單元702對(duì)應(yīng)于實(shí)施例一中的步驟S52,該模塊與對(duì)應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場(chǎng)景相同,但不限于上述實(shí)施例一所公開的內(nèi)容。需要說(shuō)明的是,上述模塊作為裝置的一部分可以運(yùn)行在實(shí)施例一提供的計(jì)算機(jī)終端10中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。

可選地,如圖8所示,所述第一獲取單元402可以包括:接收模塊802和解壓縮模塊804。

其中,接收模塊802,用于接收請(qǐng)求裝置發(fā)送的應(yīng)用程序包;解壓縮模塊804,用于對(duì)所述應(yīng)用程序包進(jìn)行解壓縮,得到所述待檢測(cè)的目標(biāo)文件;其中,在所述待檢測(cè)的目標(biāo)文件是所述具有預(yù)定格式的可執(zhí)行文件的情況下,所述請(qǐng)求裝置為基于iOS系統(tǒng)的設(shè)備或基于Mac OS系統(tǒng)的設(shè)備,所述具有預(yù)定格式的可執(zhí)行文件為MACH-O文件,所述魔數(shù)為0xFEEDFACE或者0xFEEDFACF。

此處需要說(shuō)明的是,上述接收模塊802和解壓縮模塊804對(duì)應(yīng)于實(shí)施例一中的步驟S60至步驟S62,該模塊與對(duì)應(yīng)的步驟所實(shí)現(xiàn)的示例和應(yīng)用場(chǎng)景相同,但不限于上述實(shí)施例一所公開的內(nèi)容。需要說(shuō)明的是,上述模塊作為裝置的一部分可以運(yùn)行在實(shí)施例一提供的計(jì)算機(jī)終端10中,可以通過軟件實(shí)現(xiàn),也可以通過硬件實(shí)現(xiàn)。

在本申請(qǐng)實(shí)施例中,采用獲取待檢測(cè)的目標(biāo)文件;在確定所述待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從所述待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表, 其中,所述延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);依據(jù)所述延遲符號(hào)表中的索引號(hào),獲取與所述索引號(hào)對(duì)應(yīng)的原始符號(hào)名;比對(duì)所述函數(shù)符號(hào)名和所述原始符號(hào)名是否相同;在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名得到修復(fù)后的所述待檢測(cè)的目標(biāo)文件的方式,通過獲取索引號(hào)對(duì)應(yīng)的原始符號(hào)名,在函數(shù)符號(hào)名和原始符號(hào)名不相同的情況下修正函數(shù)符號(hào)名,達(dá)到了對(duì)被混淆的待檢測(cè)的目標(biāo)文件進(jìn)行修復(fù),使得漏洞掃描工具能夠?qū)Ρ换煜拇龣z測(cè)的目標(biāo)文件進(jìn)行漏洞掃描的目的,從而實(shí)現(xiàn)了增強(qiáng)文件安全性以及漏洞掃描的有效性的技術(shù)效果,進(jìn)而解決了由于現(xiàn)有技術(shù)中函數(shù)符號(hào)名被混淆造成的無(wú)法檢測(cè)出文件漏洞的技術(shù)問題。

實(shí)施例3

本申請(qǐng)的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于保存上述實(shí)施例一所提供的文件修復(fù)方法所執(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è)的目標(biāo)文件;在確定所述待檢測(cè)的目標(biāo)文件是具有預(yù)定格式的可執(zhí)行文件的情況下,從所述待檢測(cè)的目標(biāo)文件中提取延遲符號(hào)表,其中,所述延遲符號(hào)表中包含函數(shù)符號(hào)名以及索引號(hào);依據(jù)所述延遲符號(hào)表中的索引號(hào),獲取與所述索引號(hào)對(duì)應(yīng)的原始符號(hào)名;比對(duì)所述函數(shù)符號(hào)名和所述原始符號(hào)名是否相同;在所述函數(shù)符號(hào)名和所述原始符號(hào)名不相同的情況下,修正所述函數(shù)符號(hào)名,得到修復(fù)后的所述待檢測(cè)的目標(biāo)文件。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:重復(fù)執(zhí)行以下操作,直到遍歷完所有函數(shù)符號(hào)名:將第i個(gè)函數(shù)符號(hào)名與第i個(gè)原始符號(hào)名進(jìn)行比較;若所述第i個(gè)函數(shù)符號(hào)名與所述第i個(gè)原始符號(hào)名不相同,則將所述第i個(gè)函數(shù)符號(hào)名修改為所述第i個(gè)原始符號(hào)名,其中,i為自然數(shù)。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:讀取所述待檢測(cè)的目標(biāo)文件的前n個(gè)字節(jié)中的字符,n為大于0的整數(shù);判斷所述字符是否為所述具有預(yù)定格式的可執(zhí)行文件對(duì)應(yīng)的魔數(shù),其中,所述魔數(shù)用于指示文件類型;若所述字符為所述魔數(shù),則確定所述待檢測(cè)的目標(biāo)文件是所述具有預(yù)定格式的可執(zhí)行文件。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:對(duì)所述待檢測(cè)的目標(biāo)文件進(jìn)行解析,確定所述延遲符號(hào)表在所述待檢測(cè)的目標(biāo)文件中的偏移量;基 于所述偏移量提取所述延遲符號(hào)表。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:依據(jù)所述具有第一長(zhǎng)度的文件頭遍歷所述加載命令區(qū),在所述數(shù)據(jù)區(qū)中確定所述延遲符號(hào)表的偏移量。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:將距離所述待檢測(cè)的目標(biāo)文件的起始位置所述第一長(zhǎng)度處確定為第一個(gè)加載命令區(qū)的起始位置;根據(jù)所述具有第一長(zhǎng)度的文件頭中的ncmds字段,確定所述加載命令區(qū)的個(gè)數(shù);根據(jù)第一個(gè)加載命令區(qū)的起始位置以及加載命令區(qū)的個(gè)數(shù),確定所述數(shù)據(jù)區(qū)的起始位置;從所述數(shù)據(jù)區(qū)的頭結(jié)構(gòu)中獲取所述延遲符號(hào)表的偏移量以及所述延遲符號(hào)表的字節(jié)數(shù);在距離所述數(shù)據(jù)區(qū)的起始位置的所述偏移量處,確定所述延遲符號(hào)表的起始位置。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:根據(jù)所述延遲符號(hào)表的起始位置以及所述延遲符號(hào)表的字節(jié)數(shù),提取所述延遲符號(hào)表。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:若所述第i個(gè)函數(shù)符號(hào)名與所述第i個(gè)原始符號(hào)名不相同,則確定所述待檢測(cè)的目標(biāo)文件被混淆;輸出提示消息,所述提示消息用于指示所述待檢測(cè)的目標(biāo)文件被混淆。

可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:接收請(qǐng)求裝置發(fā)送所述應(yīng)用程序包;對(duì)所述應(yīng)用程序包進(jìn)行解壓縮,得到所述待檢測(cè)的目標(biāo)文件;其中,在所述待檢測(cè)的目標(biāo)文件是所述具有預(yù)定格式的可執(zhí)行文件的情況下,所述待檢測(cè)的目標(biāo)文件為可執(zhí)行文件,所述請(qǐng)求裝置為基于iOS系統(tǒng)的設(shè)備或基于Mac OS系統(tǒng)的設(shè)備,所述具有預(yù)定格式的可執(zhí)行文件為MACH-O文件,所述魔數(shù)為0xFEEDFACE或者0xFEEDFACF。

可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以包括但不限于:U盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例中所描述的示例,本實(shí)施例在此不再贅述。

上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

在本申請(qǐng)的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。

在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的訂單信息的處理裝置, 可通過其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(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盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(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ù)范圍。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
左贡县| 理塘县| 平顶山市| 南川市| 乌鲁木齐县| 叶城县| 渝北区| 宁都县| 家居| 祥云县| 射阳县| 岳阳市| 施甸县| 丰顺县| 揭西县| 金门县| 卢湾区| 西盟| 红桥区| 马边| 庄浪县| 田东县| 沙河市| 公安县| 政和县| 大埔县| 永仁县| 阿拉善右旗| 乌兰浩特市| 农安县| 南康市| 板桥市| 措美县| 凤冈县| 章丘市| 江北区| 都兰县| 汝州市| 嘉黎县| 偃师市| 宣汉县|