徐 國 天
(中國刑事警察學(xué)院 公安信息技術(shù)與情報學(xué)院,沈陽 110854)
“僵木蠕”是僵尸程序、木馬程序和蠕蟲病毒的簡稱.2017年5月全球爆發(fā)的、肆虐互聯(lián)網(wǎng)的勒索病毒“永恒之藍(lán)”就是一種蠕蟲病毒,被感染主機(jī)中的Office文檔、數(shù)據(jù)庫等重要文件被加密,原始文件被刪除,受害者須支付300~600美金的比特幣來解密“贖回”檔案[1].在此次網(wǎng)絡(luò)入侵事件中,我國的公安專網(wǎng)、交通管理系統(tǒng)受損最為嚴(yán)重,一些地方甚至因病毒襲擊而暫停業(yè)務(wù)辦理.可以說“勒索病毒”新型網(wǎng)絡(luò)入侵已對互聯(lián)網(wǎng)安全構(gòu)成嚴(yán)重威脅.
勒索病毒主要采用RSA及AES算法對文檔進(jìn)行加密,在無秘鑰情況下,很難進(jìn)行數(shù)據(jù)解密[2].目前,通過數(shù)據(jù)恢復(fù)方法還原被勒索病毒刪除文檔是電子數(shù)據(jù)取證領(lǐng)域的研究熱點(diǎn)[3].常規(guī)數(shù)據(jù)恢復(fù)方法主要包括基于文件系統(tǒng)元信息的數(shù)據(jù)恢復(fù)方法和基于文件首尾特征值的恢復(fù)技術(shù)[4].基于文件系統(tǒng)元信息的數(shù)據(jù)恢復(fù)方法是利用被刪文件元數(shù)據(jù)項(xiàng)定位、提取殘留數(shù)據(jù),進(jìn)而完成文件恢復(fù).這種方法準(zhǔn)確性高、速度快,可以提取出文件數(shù)據(jù)、文件名稱和文件的刪除時間,適合恢復(fù)分布式、離散存儲的數(shù)據(jù)分片.但當(dāng)文件系統(tǒng)元數(shù)據(jù)被覆蓋時,即使磁盤內(nèi)殘留了大量數(shù)據(jù)分片,仍然無法完成數(shù)據(jù)恢復(fù)[5].基于文件首尾特征值的恢復(fù)技術(shù)是利用特定類型文件首部和尾部的唯一特征值,定位被刪數(shù)據(jù)的起始和結(jié)束位置,進(jìn)而完成數(shù)據(jù)恢復(fù).這種方法可以在系統(tǒng)元數(shù)據(jù)被覆蓋時,完成文件恢復(fù).但是需要掃描磁盤全部空閑存儲空間,速度較慢,且當(dāng)被刪數(shù)據(jù)以分片形式離散存儲時,會出現(xiàn)定界錯誤,進(jìn)而導(dǎo)致恢復(fù)失敗[6].除上述方法之外,文獻(xiàn)[7]提出一種基于統(tǒng)計(jì)的數(shù)據(jù)恢復(fù)方法,通過對各種類型文件數(shù)據(jù)塊計(jì)算統(tǒng)計(jì)值(統(tǒng)計(jì)量有漢明值、香農(nóng)熵、均值、卡方值等),根據(jù)統(tǒng)計(jì)值對數(shù)據(jù)塊進(jìn)行分類[7].這種方法可用于識別分片斷點(diǎn)位置,但需要提前對不同類型文件數(shù)據(jù)塊做統(tǒng)計(jì)學(xué)計(jì)算,統(tǒng)計(jì)量的選取直接影響文件恢復(fù)精度.文獻(xiàn)[8]提出一種二分片文件恢復(fù)方法,采用一種對象配對校驗(yàn)技術(shù)不斷測試確定分片斷點(diǎn)位置,完成二分片文件恢復(fù)[8].當(dāng)文件由兩個以上分片組成時,不能應(yīng)用這種方法,同時當(dāng)二分片間隔較遠(yuǎn)時,斷點(diǎn)位置計(jì)算時間也急劇增加.文獻(xiàn)[9]提出一種基于語義的文件恢復(fù)技術(shù),通過特征詞匹配來連接數(shù)據(jù)分片[9].它要求分片邊界位置存在特定語義連接詞,如英文單詞.文獻(xiàn)[10]提出一種基于文件內(nèi)部結(jié)構(gòu)的恢復(fù)方法,當(dāng)文件內(nèi)部由若干個特定結(jié)構(gòu)的數(shù)據(jù)塊組成時(例如Oracle、SQL Server數(shù)據(jù)庫文件),可以使用這種方法定位、恢復(fù)全部數(shù)據(jù)塊[10].此方法可在被刪文件首尾特征值被覆蓋時,恢復(fù)被刪數(shù)據(jù),但是僅對特定類型文件有效.文獻(xiàn)[11]提出一種基于函數(shù)映射的數(shù)據(jù)恢復(fù)方法,在文件每個字節(jié)數(shù)據(jù)的邏輯存儲位置與磁盤物理存儲位置之間建立映射,進(jìn)而完成數(shù)據(jù)恢復(fù)[11].這種方法需要不斷修正映射函數(shù),中間生成的無效數(shù)據(jù)較多,當(dāng)發(fā)生映射錯誤時需要人工干預(yù).
勒索病毒(如永恒之藍(lán)、Locky等)感染用戶主機(jī)后,會將被感染主機(jī)中的Office文檔、數(shù)據(jù)庫、圖片等重要文件加密,將原始文件刪除,向受害者索要“贖金”來解密“贖回”檔案.為防止用戶還原被刪數(shù)據(jù),勒索病毒通常將加密之后的密文數(shù)據(jù)寫回文件在磁盤內(nèi)的原始存儲位置,覆蓋原始文檔內(nèi)容,致使現(xiàn)有數(shù)據(jù)恢復(fù)方法難以有效還原被刪文件.基礎(chǔ)實(shí)驗(yàn)表明,辦公文檔在“增、刪、改”編輯過程中,文件數(shù)據(jù)在磁盤內(nèi)的存儲位置會發(fā)生遷移,且最近幾步編輯操作對應(yīng)的文件數(shù)據(jù)基本完整存儲在磁盤內(nèi),勒索病毒只對當(dāng)前文件數(shù)據(jù)(即最后一次編輯痕跡)進(jìn)行加密和覆蓋刪除處理,而對其它遺留在磁盤內(nèi)的編輯過程痕跡不進(jìn)行處理,進(jìn)而可以通過還原編輯過程痕跡來恢復(fù)原始文檔.由于辦公文檔編輯痕跡在磁盤內(nèi)極易出現(xiàn)分片存儲情況,目前現(xiàn)有數(shù)據(jù)恢復(fù)方法無法有效識別、恢復(fù)分片存儲的辦公文檔.針對上述問題,本文提出一種基于編輯過程還原的勒索病毒刪除文檔分片識別及恢復(fù)方法.該方法通過掃描全部磁盤空閑存儲空間,根據(jù)ZIP數(shù)據(jù)塊首部標(biāo)志位和修改時間字段識別全部辦公文檔編輯過程痕跡數(shù)據(jù)分片,再利用文檔尾部目錄項(xiàng)將數(shù)據(jù)分片重組為完整的Office文檔,采用CRC32校驗(yàn)技術(shù)修復(fù)邊界數(shù)據(jù)塊識別錯誤.實(shí)驗(yàn)結(jié)果表明,在主機(jī)感染勒索病毒情況下,該方法可準(zhǔn)確識別、恢復(fù)2007以上版本Office電子文檔編輯痕跡數(shù)據(jù)分片,重組原始辦公文檔內(nèi)容.
文件系統(tǒng)元數(shù)據(jù)(如NTFS系統(tǒng)的$MFT元數(shù)據(jù),EXT4系統(tǒng)的inode元數(shù)據(jù))記錄了磁盤內(nèi)全部文件信息,包括文件數(shù)據(jù)在磁盤內(nèi)的存儲位置,文件最近一次訪問及修改時間,文件大小和文件名稱等重要信息.磁盤內(nèi)每個文件對應(yīng)一條元記錄,文件系統(tǒng)通過元記錄可以快速訪問文件數(shù)據(jù),當(dāng)文件內(nèi)容發(fā)生變化或存儲位置發(fā)生改變時,元記錄項(xiàng)自動更新.Office辦公文檔編輯是指對文件內(nèi)容進(jìn)行增、刪、改操作,每次保存動作對應(yīng)一組編輯行為.實(shí)驗(yàn)結(jié)果表明,即使編輯行為只造成一個字節(jié)內(nèi)容改變,也會觸發(fā)文件數(shù)據(jù)在磁盤內(nèi)發(fā)生存儲位置遷移.如圖1(a)所示,編輯行為發(fā)生后文檔數(shù)據(jù)在磁盤內(nèi)被移動到新的位置,原始位置的文件內(nèi)容仍然存留在磁盤內(nèi),只是對應(yīng)存儲空間被標(biāo)識為空閑狀態(tài),其它文件可以重新使用這塊存儲區(qū)域.文件的元記錄項(xiàng)也發(fā)生遷移,原始記錄項(xiàng)被分配給其它文件重新使用,文件系統(tǒng)產(chǎn)生一個新的元記錄項(xiàng)指向磁盤內(nèi)當(dāng)前文件數(shù)據(jù)區(qū)域.
圖1 磁盤內(nèi)遺留的辦公文檔編輯過程痕跡Fig.1 Traces of document editing process left in disk
用戶主機(jī)感染勒索病毒后,勒索病毒通過掃描文件系統(tǒng)元數(shù)據(jù),快速定位全部重要文檔存儲位置,將文檔依次讀入內(nèi)存加密,再將密文寫回磁盤原始存儲位置,覆蓋原始文件內(nèi)容.除了最后一次編輯痕跡外,辦公文檔其他編輯痕跡在元文件中并未記錄,即勒索病毒只會加密、刪除辦公文檔最后一次編輯痕跡,而不會對之前遺留在磁盤內(nèi)的編輯痕跡進(jìn)行加密、刪除處理.因此,可以通過提取辦公文檔遺留的編輯過程痕跡來恢復(fù)原始文檔內(nèi)容.
辦公文檔編輯過程中會在磁盤內(nèi)遺留多處痕跡數(shù)據(jù),這些編輯過程痕跡對應(yīng)的存儲空間被文件系統(tǒng)標(biāo)識為空閑狀態(tài),可以分配給其它文件重新使用.文件系統(tǒng)在分配存儲空間時,為防止出現(xiàn)磁盤碎片,會優(yōu)先使用空閑空間的首部或尾部數(shù)據(jù)塊,這導(dǎo)致部分編輯痕跡數(shù)據(jù)首部或尾部可能被局部覆蓋,造成文檔首尾特征值消失.此時,即使編輯痕跡仍有大量數(shù)據(jù)殘留,但因首部特征值被局部覆蓋,現(xiàn)有數(shù)據(jù)恢復(fù)方法無法有效識別、恢復(fù)文檔內(nèi)容.如圖1(b)所示,編輯1遺留的痕跡數(shù)據(jù)首部被覆蓋,首部特征值消失,即使這組痕跡內(nèi)仍有大量數(shù)據(jù)殘留,現(xiàn)有數(shù)據(jù)恢復(fù)方法也無法利用首部特征值識別、恢復(fù)這組文件數(shù)據(jù).
文件在編輯過程中,存儲在磁盤內(nèi)的文件數(shù)據(jù)極易出現(xiàn)分片存儲情況,即文件內(nèi)容被分為多段存儲在磁盤不同區(qū)域內(nèi)[12],如圖1(b)所示編輯2產(chǎn)生的痕跡數(shù)據(jù)被分為兩個分片存儲在磁盤內(nèi).現(xiàn)有方法可以根據(jù)文件首尾特征值恢復(fù)連續(xù)存儲的文件內(nèi)容,但當(dāng)文件以分片方式,離散分布于磁盤內(nèi)時,無法有效識別、恢復(fù)文檔數(shù)據(jù).
Office電子文檔在編輯過程中,存儲在磁盤上的文件數(shù)據(jù)極易出現(xiàn)分片情況,即文件內(nèi)容被分為多段,分別存放在幾塊非連續(xù)存儲區(qū)域內(nèi).圖2(a)所示Office文檔容量為0X447E個簇塊,文檔被劃分為6個分片存儲在磁盤內(nèi),分片大小依次為0X6、0X1FEB、0X0A23、0X1164、0X08FD和0X9個簇塊.圖2(a)給出了每個分片的容量和存儲位置,以第3個分片為例,其在磁盤存儲空間的起始簇號為0X0A2D,分片容量為0X0A23個簇塊,6個分片在磁盤存儲空間內(nèi)的存放次序?yàn)?、4、5、1、2、6.
圖2 Office文檔分片重組問題Fig.2 Office document fragmentation and reorganization
(1)
為了計(jì)算正確的分片次序,需要標(biāo)識出原始文件中相鄰的分片對.本文使用權(quán)重值C(i,j)表示分片Aj和Ai相鄰的可能性,權(quán)重值越大表示兩個分片相鄰的可能性越大,反之越小,權(quán)重最大值為1.有多種技術(shù)可以計(jì)算權(quán)重值,例如通過相鄰分片邊界數(shù)據(jù)塊CRC32校驗(yàn)值計(jì)算,或者通過邊界數(shù)據(jù)塊熵值計(jì)算.一旦全部分片兩兩之間權(quán)重值都被計(jì)算出來,正確重組原始Office文檔的最佳排序π也就計(jì)算出來了.根據(jù)最佳排序π計(jì)算出的n個節(jié)點(diǎn)累計(jì)權(quán)重值一定大于其它可能排序計(jì)算出的累計(jì)權(quán)重值[14].
如果用全部候選權(quán)重值C來構(gòu)成n個節(jié)點(diǎn)的完全圖鄰接矩陣,則公式(1)中求最佳排序π,使得T值最大的問題也可以抽象為圖問題.其中節(jié)點(diǎn)i代表數(shù)據(jù)分片i,邊的權(quán)重C(i,j)代表分片j與分片i相鄰的可能性.正確的排列次序π是圖中的一條路徑,該路徑遍歷所有節(jié)點(diǎn),并且該路徑的累計(jì)權(quán)重值大于其它路徑的累計(jì)權(quán)重值.尋找這條最佳路徑問題相當(dāng)于在一張完全圖中找出一條累計(jì)權(quán)重值最大的哈密頓路徑問題,問題的最佳解決方案是比較難于獲得的.前面只考慮了單個Office文檔的恢復(fù)問題,但實(shí)際環(huán)境中,計(jì)算機(jī)存儲空間內(nèi)通常有多個Office文檔需要恢復(fù),每個文檔又由若干個數(shù)據(jù)分片組成.分片數(shù)量眾多,且不清楚哪些分片屬于特定的Office文檔,這些因素使得Office數(shù)據(jù)分片恢復(fù)問題復(fù)雜性進(jìn)一步提高[14].
當(dāng)分析由n個數(shù)據(jù)分片組成的k個Office文檔恢復(fù)問題時,可以將這些分片看成由n個節(jié)點(diǎn)組成的一張完全圖,相鄰節(jié)點(diǎn)之間的權(quán)重值代表兩個分片在同一個Office文檔中位置相鄰的可能性.假設(shè)Pi是第i個Office文檔的重組路徑,那么全部k個Office文檔的最佳重組路徑集合{P1,P2…Pk}是n個節(jié)點(diǎn)構(gòu)成的完全圖中k條頂點(diǎn)不相交路徑,如圖2(b)示例.因此,查找k個最佳排序問題等價于在完全圖中尋找K條頂點(diǎn)不相交路徑問題,這些路徑的累計(jì)權(quán)重值最大,這是一個NP完全問題[14].
在實(shí)際環(huán)境中,解決k個Office文檔數(shù)據(jù)分片恢復(fù)問題難度相對小些.這是因?yàn)镺ffice文檔有固定組成結(jié)構(gòu),在文檔尾部存在一個目錄區(qū),根據(jù)目錄區(qū)數(shù)據(jù)可以確定Office文檔總大小,同時根據(jù)目錄項(xiàng)可以在磁盤空閑空間內(nèi)找出全部Office數(shù)據(jù)分片,還可確定分片的排列次序.如果目錄區(qū)數(shù)據(jù)遭到覆蓋,可以根據(jù)數(shù)據(jù)分片邊界位置數(shù)據(jù)塊CRC32校驗(yàn)值重組分片.
圖3說明了Office文檔數(shù)據(jù)分片識別、重組方法的基本原理.圖3(a)顯示了一個Office文檔的基本存儲結(jié)構(gòu),由3部分組成,即數(shù)據(jù)塊區(qū)、目錄區(qū)和目錄結(jié)束記錄[15].數(shù)據(jù)塊采用ZIP存儲結(jié)構(gòu),圖3(a)所示文檔包括4個數(shù)據(jù)塊(即obj1-obj4).目錄區(qū)由多個目錄項(xiàng)構(gòu)成,每個目錄項(xiàng)保存了一個數(shù)據(jù)塊在整個Office文檔中的起始偏移地址,同時記錄了數(shù)據(jù)塊名稱、塊數(shù)據(jù)CRC32校驗(yàn)值(注意這個校驗(yàn)值是未壓縮塊數(shù)據(jù)的CRC32校驗(yàn)值[16])、塊數(shù)據(jù)壓縮前和壓縮后大小,上述4種信息也存儲在對應(yīng)數(shù)據(jù)塊首部.
圖3 Office文檔數(shù)據(jù)分片識別、重組原理圖Fig.3 Data segmentation recognition and reorganization
算法1的主要功能是從磁盤空閑空間內(nèi)識別出全部Office數(shù)據(jù)分片,再查找出全部目錄項(xiàng)數(shù)據(jù)塊,根據(jù)目錄項(xiàng)將分片重組為完整的Office文檔,同時對分片邊界受損數(shù)據(jù)塊進(jìn)行修復(fù).算法流程如下:
算法1.
輸入?yún)?shù):磁盤空閑空間地址信息.
輸出參數(shù):無.
Step1.在磁盤空閑存儲空間內(nèi),搜索識別Office數(shù)據(jù)分片,具體步驟見算法2.
Step2.查找包含Office文檔目錄結(jié)束記錄的數(shù)據(jù)分片,令這類分片數(shù)量為m(即待恢復(fù)的Office文檔數(shù)量為m),設(shè)置num=1.
Step3.根據(jù)第num個Office文檔目錄項(xiàng)識別第num個文件全部數(shù)據(jù)塊,具體步驟參見算法3.
Step4.第num個Office文檔重組,具體步驟見算法4.
Step5.第num個Office文檔中受損數(shù)據(jù)塊修復(fù),具體步驟見算法5.
Step6.設(shè)置num=num+1,如果num<=m,則執(zhí)行Step 3,否則,算法結(jié)束.
算法2的主要功能是尋找殘留在磁盤內(nèi)的全部Office數(shù)據(jù)分片.分片的識別方法是先找到全部數(shù)據(jù)塊,如果這些數(shù)據(jù)塊首尾相接,說明它們屬于同一個分片,如果數(shù)據(jù)塊出現(xiàn)不連續(xù)情況,表明發(fā)現(xiàn)了新的分片,分片計(jì)數(shù)值增加.算法流程如下:
算法2.
輸入?yún)?shù):全部磁盤空閑存儲空間地址信息.
輸出參數(shù):全部Office數(shù)據(jù)分片地址信息.
Step1.磁盤內(nèi)空閑存儲空間數(shù)量為n塊,令space=1,frag=1.
Step2.令ST=第space塊空閑空間起始地址.
Step3.將修改時間和ZIP標(biāo)志位作為搜索關(guān)鍵字,從地址ST開始查找Office數(shù)據(jù)塊.如果查找成功,令BT1=數(shù)據(jù)塊起始位置,BL1=數(shù)據(jù)塊長度,設(shè)置分片起始位置CT[frag]=BT1,分片長度值CL[frag]=BL1,ST=BT1+BL1,執(zhí)行Step 4;如未命中Office數(shù)據(jù)塊,執(zhí)行Step 6.ZIP標(biāo)志位值為0X504B0102或0X504B0304或0X504B0506,數(shù)據(jù)塊的修改時間字段值為0X00002100,即1980-01-01 00:00:00.
Step4.從起始地址ST開始,繼續(xù)查找Office數(shù)據(jù)塊,如成功命中,執(zhí)行Step 5;否則,執(zhí)行Step 6.
Step5.BT2=命中塊起始地址,BL2=命中塊長度值;如果BT2=BT1+BL1,即兩個數(shù)據(jù)塊首尾相接,則令CL[frag]=CL[frag]+BL2,ST=BT2+BL2,BL1=BL2,BT1=BT2,執(zhí)行Step 4.如果BT2≠BT1+BL1,則令frag=frag+1,新識別分片起始位置為CT[frag]=BT2,分片初始長度值CL[frag]=BL2,設(shè)置ST=BT2+BL2,BT1=BT2,BL1=BL2,執(zhí)行Step 4.
Step6.如果CT[frag]≠0,則令frag=frag+1.令space=space+1,如果space<=n,則跳轉(zhuǎn)到Step 2,否則,算法結(jié)束.
以圖3為例,分析算法2圖3(b)所示Office文檔被文件系統(tǒng)劃分為3個分片存儲在磁盤內(nèi),存放次序?yàn)榉制?、分片3和分片1.Office數(shù)據(jù)塊采用ZIP存儲格式,與所有ZIP類型文件具有相同的首部標(biāo)志位,標(biāo)志位分別是0X504B0506、0X504B0304和0X504B0102.如果僅使用上述3種標(biāo)志位作為搜索關(guān)鍵字,會產(chǎn)生大量誤報情況.研究發(fā)現(xiàn)ZIP類型文件(如APK程序文件)的修改時間字段存儲了數(shù)據(jù)塊內(nèi)容發(fā)生變化的實(shí)際時間,這個字段是一個動態(tài)變化的數(shù)值,時間計(jì)量單位精確到秒.2007以上版本Office文件也采用ZIP壓縮存儲結(jié)構(gòu),但Office文件的修改時間字段值為0X00002100(即1980-01-01 00:00:00),這個字段不會因?yàn)閿?shù)據(jù)塊內(nèi)容改變而發(fā)生變化,這是Office文件與其它類型ZIP文件的一個明顯區(qū)別.因此,將修改時間字段與標(biāo)志位一起設(shè)置為搜索關(guān)鍵字可以有效避免誤報,準(zhǔn)確識別出磁盤空閑存儲空間內(nèi)的全部Office數(shù)據(jù)塊[17].通過塊首部標(biāo)志位可以確定塊起始地址[18],通過塊首部長度字段可以確定塊結(jié)束位置,如果兩個數(shù)據(jù)塊首尾相接,說明它們隸屬于同一個數(shù)據(jù)分片,否則說明出現(xiàn)了新的分片,分片計(jì)數(shù)值加一.利用這種方法可以識別出磁盤空閑空間內(nèi)的全部Office數(shù)據(jù)分片,圖3(b)所示存儲空間內(nèi)Office數(shù)據(jù)分片識別結(jié)果如圖3(c)所示.
算法3的主要功能是根據(jù)第num個Office文檔的目錄項(xiàng)搜索其全部數(shù)據(jù)塊,確定每個數(shù)據(jù)塊的起始和結(jié)束位置.如果某個數(shù)據(jù)塊定位失敗,則相應(yīng)的塊起始和結(jié)束地址設(shè)置為-1.算法流程如下:
算法3.
輸入?yún)?shù):全部Office數(shù)據(jù)分片地址信息和第num個Office文檔目錄區(qū)域數(shù)據(jù).
輸出參數(shù):全部數(shù)據(jù)塊的起始和結(jié)束地址.
Step1.設(shè)置item_m=第num個Office文件目錄項(xiàng)數(shù)量,令block=1.
Step2.如果block>item_m,算法結(jié)束,否則執(zhí)行Step 3.
Step3.在數(shù)據(jù)分片地址空間內(nèi),將修改時間、ZIP標(biāo)志位、數(shù)據(jù)塊對象名、壓縮前后塊數(shù)據(jù)大小和CRC32校驗(yàn)值作為搜索關(guān)鍵字,定位第block個目錄項(xiàng)對應(yīng)的第block個Office數(shù)據(jù)塊.如定位成功,設(shè)置BST[block]=數(shù)據(jù)塊起始地址,EST[block]=數(shù)據(jù)塊結(jié)束地址,否則,設(shè)置BST[block]=-1,EST[block]=-1.之后,令block=block+1,執(zhí)行Step 2.
算法4的主要功能是重組Office文檔.首先新建一個Office文檔,其大小與待恢復(fù)文檔相同.之后按照目錄項(xiàng)中存儲的塊偏移地址,將第num個Office文檔全部數(shù)據(jù)塊從磁盤空閑存儲空間內(nèi)讀出,依次寫入新建文檔的相應(yīng)偏移地址,完成文檔重組.算法流程如下:
算法4.
輸入?yún)?shù):第num個Office文檔目錄區(qū)數(shù)據(jù),第num個Office文檔全部數(shù)據(jù)塊起始與結(jié)束地址,以及全部Office數(shù)據(jù)分片地址信息.
輸出參數(shù):第num個重組Office文檔.
Step1.令block=1,filesize=目錄區(qū)大小+目錄區(qū)域偏移地址+目錄結(jié)束記錄大小.創(chuàng)建一個大小為filesize的目標(biāo)文件,將第num個Office文件目錄區(qū)域數(shù)據(jù)存儲到新建立文件末尾.
Step2.第num個Office文件的目錄項(xiàng)個數(shù)為m,如果block<=m,則執(zhí)行Step 3,否則,算法結(jié)束.
Step3.令OP[block]=第block個數(shù)據(jù)塊在Office文件中的邏輯偏移地址,BST[block]=第block個數(shù)據(jù)塊物理起始地址,EST[block]=第block個數(shù)據(jù)塊物理結(jié)束地址.如果BST[block]>0 andEST[block]>0,則從邏輯偏移地址OP[block]開始,將第block個數(shù)據(jù)塊寫入新建文件.設(shè)置block=block+1,執(zhí)行Step 2.
在Office文檔數(shù)據(jù)分片重組算法4中,通過目錄結(jié)束記錄可以計(jì)算出Office文檔總大小[19],公式如下:Office文檔總大小=目錄區(qū)大小+目錄區(qū)域偏移地址+目錄結(jié)束記錄大小,目錄區(qū)在Office文檔的偏移地址恰好等于數(shù)據(jù)塊區(qū)容量[20],因此三者之和等于Office文檔總大小[21].算法的處理思路是創(chuàng)建一個新文檔,容量與待恢復(fù)文檔大小相同,再將恢復(fù)出的目錄項(xiàng)和數(shù)據(jù)塊依次寫入新建文檔的特定偏移位置,進(jìn)而完成文檔重組[22].根據(jù)目錄項(xiàng)中存儲的OBJ_name、CompressedSize、UnCompressedSize和CRC32等特征值定位相應(yīng)數(shù)據(jù)塊,再按照目錄項(xiàng)中記錄的偏移地址,將數(shù)據(jù)塊寫入新文檔相應(yīng)的偏移位置.圖3(d)為重組之后的Office文檔,可見位于分片邊界位置的obj2和obj4數(shù)據(jù)塊識別錯誤,部分不屬于該文檔的數(shù)據(jù)內(nèi)容被寫入新文件.如果此時打開新建文檔,通常會提示出錯信息,部分嚴(yán)重錯誤(如document.xml受損)會造成文檔內(nèi)容無法正常顯示,因此需要對分片邊界數(shù)據(jù)塊識別錯誤進(jìn)行修正.
下面以圖3(c)中obj4數(shù)據(jù)塊的修復(fù)為例分析受損數(shù)據(jù)塊的修復(fù)原理,修復(fù)過程如圖4所示,這里指定簇塊大小為4096字節(jié).圖4中SP1′為分片2內(nèi)最后一個數(shù)據(jù)塊首部起始地址,down(SP1′)為分片2內(nèi)最后一個數(shù)據(jù)塊首部向下到達(dá)的第一個簇塊邊界位置,SP1為分片3內(nèi)第一個數(shù)據(jù)塊起始位置,up(SP1 )為分片3內(nèi)第一個數(shù)據(jù)塊首部向上到達(dá)的首個簇塊邊界位置.利用obj4塊首部數(shù)據(jù)計(jì)算出塊長度值為FLEN,如長度值滿足FLEN=down(SP1′)-SP1′+n× 4096+SP1-up(SP1) ,則兩個分片可以嘗試配對修復(fù).圖4中EPn代表第n次正確識別簇塊,EPn′代表第n次錯誤識別簇塊.
圖4 分片邊界數(shù)據(jù)塊修復(fù)Fig.4 Repair of fragmented boundary data block
在圖4所示例子中,FLEN=down(SP1′) -SP1′+2 × 4096+SP1 -up(SP1),長度值滿足配對條件,可以嘗試進(jìn)行修復(fù).目前已知數(shù)據(jù)塊第1個分段obj4-1的起始地址是SP1′,第2個分段obj4-2的結(jié)束地址是SP1,只要能計(jì)算出第1個分段的結(jié)束位置(即分片2的結(jié)束位置)和第2個分段的起始位置(即分片3的起始位置),即可重組兩個分段.需要注意的是,由于磁盤空間以簇塊為分配單位,因此,分片起始或結(jié)束位置一定位于簇塊邊界.
算法的基本思路是通過不斷調(diào)整數(shù)據(jù)塊兩個分段的大小,來探測正確的分片位置,直至動態(tài)組建的數(shù)據(jù)塊CRC32校驗(yàn)值與塊首部存儲的CRC32值相同.首先將第1個分段大小預(yù)設(shè)為可能達(dá)到的最大值,即down(SP1′)-SP1′+n×4096,第2個分段大小設(shè)置為可能達(dá)到的最小值,即SP1-up(SP1),將兩個分段組合在一起后,計(jì)算組成數(shù)據(jù)塊的CRC32校驗(yàn)值.如計(jì)算出的CRC32校驗(yàn)值與數(shù)據(jù)塊首部存儲的CRC32校驗(yàn)值相同,說明配對成功,否則,配對失敗,將第1個分段縮小1個簇塊,第2個分段擴(kuò)充1個簇塊,再次匹配.重復(fù)上述過程,直至CRC32校驗(yàn)值正確,或第1個分段大小達(dá)到可能的最小值down(SP1′)-SP1′,第2個分段大小達(dá)到可能的最大值n×4096+SP1-up(SP1),如仍然無法通過CRC32驗(yàn)證,則當(dāng)前數(shù)據(jù)塊修復(fù)失敗.在圖4所示例子中,經(jīng)過兩次配對后,正確重組了obj4數(shù)據(jù)塊.
算法5的主要功能是修復(fù)第num個Office文檔位于分片邊界位置數(shù)據(jù)塊的識別錯誤.算法流程如下:
算法5.
輸入?yún)?shù):第num個Office文檔的目錄區(qū)數(shù)據(jù),第num個Office文檔每個分片在磁盤內(nèi)的起始和結(jié)束地址,指向第num個新建立Office文檔的指針.
輸出參數(shù):第num個修復(fù)后Office文檔.
Step1.第num個Office文檔共有u個分片,令整數(shù)變量frag=1.
Step2.如果frag<=u,則執(zhí)行Step 3,否則,算法結(jié)束.
Step3.令FLEN=第frag個分片內(nèi)最后一個數(shù)據(jù)塊長度值,SP1′=第frag個分片內(nèi)最后一個數(shù)據(jù)塊的起始地址,down(SP1′)=第frag個分片內(nèi)最后一個數(shù)據(jù)塊的起始地址向下到達(dá)的首個簇塊邊界地址,SP1=第frag+1個分片內(nèi)第一個數(shù)據(jù)塊的起始地址,up(SP1)=第frag+1個分片內(nèi)第一個數(shù)據(jù)塊的起始地址向上到達(dá)的首個簇塊邊界地址,CS=磁盤簇塊大小.如果(FLEN-down(SP1′)+SP1′-SP1+up(SP1))MODCS=0條件為真,則執(zhí)行Step 4,否則執(zhí)行Step 9.
Step4.令整數(shù)變量n=(FLEN-down(SP1′)+SP1′-SP1+up(SP1))/CS,設(shè)置整數(shù)變量cluster=n.
Step5.如果cluster>=0,則執(zhí)行Step 6,否則執(zhí)行Step 9.
Step6.令Frag1_pos=SP1′,Frag1_size=down(SP1′)-SP1′+cluster×CS,Frag2_pos=up(SP1)-(n-cluster)×CS,Frag2_size=(n-cluster)×CS+SP1-up(SP1),從地址Frag1_pos開始,提取Frag1_size字節(jié)數(shù)據(jù)作為第1部分內(nèi)容,從地址Frag2_pos開始,提取Frag2_size字節(jié)數(shù)據(jù)作為第2部分內(nèi)容,將兩部分內(nèi)容組合成一個數(shù)據(jù)塊.計(jì)算組成數(shù)據(jù)塊的CRC32校驗(yàn)值,如該值與數(shù)據(jù)塊首部存儲的CRC32值相同,說明配對成功,執(zhí)行Step 7,否則,配對失敗,執(zhí)行Step 8,將前一部分內(nèi)容收縮1個簇塊,后一部分內(nèi)容擴(kuò)展1個簇塊,重新配對.
Step7.根據(jù)特征值定位受損數(shù)據(jù)塊在第num個新建立待修復(fù)Office文件中的邏輯偏移地址為OA,將Step 6重組成功的數(shù)據(jù)塊從磁盤內(nèi)讀出,從邏輯偏移地址OA開始,將讀出數(shù)據(jù)依次寫入第num個新建立待修復(fù)Office文件,之后,執(zhí)行Step 9.
Step8.令cluster=cluster-1,執(zhí)行Step 5.
Step9.令frag=frag+1,執(zhí)行Step 2,開始修復(fù)下一個受損數(shù)據(jù)塊.
辦公文檔編輯痕跡時間差是指兩組痕跡形成的時間間隔,以“天”為單位進(jìn)行統(tǒng)計(jì).2007以上版本Office文件采用Ooxml(Office Open Xml)結(jié)構(gòu),以ZIP壓縮格式存儲在磁盤內(nèi).從磁盤內(nèi)提取到辦公文檔編輯痕跡后,利用ZIP算法進(jìn)行解壓縮,提取出core.xml文件,其中存儲了文件創(chuàng)建者、最后一次修改者、文件創(chuàng)建時間、修改時間、最后一次打印時間、編輯次序等關(guān)鍵信息.上述信息是在辦公文檔編輯過程中,由Office軟件系統(tǒng)自動寫入core.xml文件.由于文件創(chuàng)建時間精確到“秒”,如多組編輯痕跡創(chuàng)建時間相同,且創(chuàng)建者為同一用戶,則認(rèn)定這組數(shù)據(jù)為同一文檔的編輯過程痕跡,可按照文件修改時間對編輯痕跡進(jìn)行排序.最后一組痕跡(即文件當(dāng)前數(shù)據(jù))可以根據(jù)文件系統(tǒng)元數(shù)據(jù)項(xiàng)確定.如圖5所示,3組痕跡創(chuàng)建時間相同,且均由同一用戶kyc創(chuàng)建,因此確定為同一文件編輯過程遺留痕跡,由MYMMFT元數(shù)據(jù)項(xiàng)確定最后一組是文件當(dāng)前數(shù)據(jù),3組編輯痕跡時間差分別為8天和15天.
圖5 辦公文檔編輯痕跡時間差計(jì)算方法Fig.5 Calculating of time difference in document editing
受磁盤空閑存儲空間及文件大小等因素影響,辦公文檔編輯痕跡可能分為多段存儲在磁盤內(nèi),分段個數(shù)即為文檔的分片數(shù)量.由于辦公文檔編輯痕跡遺留在磁盤空閑存儲空間內(nèi),相當(dāng)于被刪除數(shù)據(jù),因此在文件系統(tǒng)元文件中沒有對應(yīng)的目錄項(xiàng),應(yīng)用本文方法在識別、重組Office數(shù)據(jù)塊時對編輯痕跡分片情況進(jìn)行統(tǒng)計(jì).辦公文檔當(dāng)前數(shù)據(jù)(即最后一次編輯痕跡)的分片情況可以根據(jù)文件系統(tǒng)元記錄項(xiàng)中存儲的數(shù)據(jù)運(yùn)行屬性確定.
圖6 辦公文檔編輯痕跡時間差分析Fig.6 Analysis of time difference in document editing
本文采用如下實(shí)驗(yàn)環(huán)境統(tǒng)計(jì)辦公文檔編輯痕跡時間差及分片存儲情況.硬件設(shè)備為HP臺式筆記本,Intel i7雙核處理器、1.5TB容量HDD硬盤、16GB內(nèi)存,安裝2013版Office辦公軟件、WIN8操作系統(tǒng).該設(shè)備于2018年1月采購,用于筆者的日常辦公和科研管理工作,未更換過硬件設(shè)備,未進(jìn)行過操作系統(tǒng)重裝或磁盤格式化操作.實(shí)驗(yàn)設(shè)備F盤主要用于存儲日常教學(xué)、科研、辦案等資料數(shù)據(jù),F盤容量為361.91G,剩余空間容量為51.2GB,采用NTFS文件系統(tǒng).
應(yīng)用本文方法識別、恢復(fù)F盤內(nèi)Office辦公文檔編輯痕跡,實(shí)驗(yàn)統(tǒng)計(jì)結(jié)果如圖6所示,對分類識別出的編輯痕跡按文件大小遞增排序,依次編號,編輯時間差統(tǒng)計(jì)單位為“天”.實(shí)驗(yàn)共提取到3287組docx文檔痕跡,1879組xlsx表文檔痕跡,183組pptx幻燈片文檔痕跡.3類辦公文檔痕跡與當(dāng)前文件的編輯時間差統(tǒng)計(jì)結(jié)果如圖6(a)-圖6(c)所示,可見絕大部分編輯痕跡與當(dāng)前文檔時間差較近.與當(dāng)前文檔編輯時間差為0(即在同一天產(chǎn)生的痕跡)占比如下,docx文件占比45.23%、xlsx文件占比27.94%、pptx文件占比15.3%.這部分編輯痕跡與當(dāng)前文檔內(nèi)容基本相同,其它與當(dāng)前文檔時間差較近的編輯痕跡也可近似還原文件原始內(nèi)容.
圖7 辦公文檔編輯痕跡分片情況分析Fig.7 Analysis of document editing trace fragmentation
3類文檔編輯痕跡分片存儲情況統(tǒng)計(jì)結(jié)果如圖7(a)~圖7(c)所示.由于文件編號是按照文檔大小遞增排序,可以看出docx編輯痕跡分片情況與文件大小有直接關(guān)聯(lián),隨著文件容量的增加,編輯痕跡分片數(shù)量也在同步增長.xlsx文件產(chǎn)生的二分片編輯痕跡較多,pptx文件基本不分片.應(yīng)用本文提出的辦公文檔編輯過程痕跡恢復(fù)方法可有效識別、恢復(fù)分片存儲狀態(tài)的編輯過程痕跡.
為測試?yán)账鞑《緦k公文檔的處理方式,本文選擇5種典型勒索病毒樣本程序進(jìn)行實(shí)驗(yàn)分析.為防止病毒對計(jì)算機(jī)系統(tǒng)及局域網(wǎng)安全構(gòu)成威脅,全部實(shí)驗(yàn)任務(wù)均在虛擬機(jī)環(huán)境下進(jìn)行.虛擬機(jī)采用15.1.0 build-13591040版本VMware?Workstation 15 Pro,實(shí)例安裝Windows 8.1 Enterprise Evaluation操作系統(tǒng),Intel i7雙核處理器,16GB內(nèi)存,40GB硬盤.實(shí)驗(yàn)準(zhǔn)備任務(wù)包括:在虛擬機(jī)D盤上建立實(shí)驗(yàn)測試文件夾,內(nèi)部放置docx、xlsx和pptx文件各10組,文件大小從10KB到20MB之間.使用20.3版winhex記錄這些辦公文檔的磁盤存儲位置,提取文檔相應(yīng)的MFT元記錄.之后,制作虛擬機(jī)鏡像文件.實(shí)驗(yàn)開始階段:關(guān)閉虛擬機(jī)網(wǎng)卡(防止病毒對物理機(jī)和局域網(wǎng)環(huán)境造成影響),運(yùn)行勒索病毒,觀察病毒運(yùn)行現(xiàn)象.待勒索信息出現(xiàn)后,使用winhex分析原始文件存儲位置數(shù)據(jù)內(nèi)容是否發(fā)生改變,分析MFT元記錄變化情況,分析密文數(shù)據(jù)的存儲狀態(tài),做好相關(guān)實(shí)驗(yàn)結(jié)果記錄.之后,使用鏡像文件還原虛擬機(jī)運(yùn)行環(huán)境,再分析下一個病毒樣本.利用虛擬機(jī)鏡像技術(shù)可以徹底清除病毒數(shù)據(jù),使得每個病毒樣本在同一環(huán)境下進(jìn)行測試分析,確保實(shí)驗(yàn)結(jié)果的準(zhǔn)確性.
表1 勒索病毒對辦公文檔處理方式Table 1 Processing of office documents by ransomware
實(shí)驗(yàn)結(jié)果表明,全部勒索病毒均采用RSA、AES或DES算法對實(shí)驗(yàn)文件夾內(nèi)的Office文檔進(jìn)行了加密處理,原始文件被刪除,但對“Windows”,“Program Files”,“Program Files(x86)”等系統(tǒng)目錄下的文本文檔不進(jìn)行加密、刪除處理.如表1所示,4種病毒對辦公文檔進(jìn)行了全文加密,而NOSTRO病毒僅對文檔前1024字節(jié)進(jìn)行加密(這部分?jǐn)?shù)據(jù)通常存儲了文檔的重要信息,如被加密,將使文檔無法正常使用),這種方式可以獲得更快的加密速度.實(shí)驗(yàn)結(jié)果表明,Mindlost病毒僅對原始文件進(jìn)行了刪除處理,未覆蓋原始文件數(shù)據(jù),這部分內(nèi)容可以使用常規(guī)數(shù)據(jù)恢復(fù)方法進(jìn)行有效還原.其余4種病毒將密文數(shù)據(jù)寫回原始文件存儲位置,造成原始文件內(nèi)容被完全或局部覆蓋,這部分?jǐn)?shù)據(jù)無法采用常規(guī)數(shù)據(jù)恢復(fù)方法進(jìn)行還原.出于效率原因,全部勒索病毒均未對辦公文檔編輯過程痕跡進(jìn)行處理,因此可利用編輯過程痕跡還原被勒索病毒刪除、覆蓋的原始辦公文檔.
共有10名成員參與了實(shí)驗(yàn)測試,每人使用一臺Windows系統(tǒng)主機(jī),磁盤均采用NTFS格式文件系統(tǒng),測試主機(jī)配置如表2所示,測試周期為10天.為防止勒索病毒破壞測試主機(jī)軟、硬件系統(tǒng),在測試開始前,對全部測試主機(jī)硬盤制作鏡像,將原盤拆除,安裝克隆磁盤.待全部測試任務(wù)結(jié)束后,重新裝回原始磁盤,恢復(fù)測試機(jī)正常工作狀態(tài),同時對10塊測試磁盤執(zhí)行低層格式化操作,徹底清除病毒數(shù)據(jù).
表2 測試系統(tǒng)配置參數(shù)Table 2 Test system configuration parameters
在實(shí)驗(yàn)測試期間,每名成員每天創(chuàng)建1個Office文檔,隨后對文檔進(jìn)行10次編輯操作,編輯行為包括插入、修改、刪除、復(fù)制和粘貼,編輯操作時間間隔為隨機(jī)值.創(chuàng)建文檔類型包括docx、xlsx和pptx,經(jīng)過編輯之后,文件大小在24KB至10MB之間.每次編輯完成后,詳細(xì)記錄編輯行為發(fā)生的時間和被測文件在磁盤內(nèi)的存儲位置.可以使用winhex提取文件存儲位置,方法是先搜索被測文件的MFT記錄項(xiàng),再根據(jù)數(shù)據(jù)運(yùn)行屬性定位文件數(shù)據(jù)具體位置.測試期間內(nèi),測試員正常使用計(jì)算機(jī)處理日常工作.10天測試結(jié)束后,進(jìn)行勒索病毒實(shí)驗(yàn),選擇“永恒之藍(lán)”(WannaCry)勒索病毒作為測試樣本,測試開始前,斷開測試主機(jī)網(wǎng)絡(luò)連接通道,在10臺測試主機(jī)上種植勒索病毒,隨后使用X-way forensics v20.8和本文方法對Office文檔進(jìn)行數(shù)據(jù)恢復(fù),同時比較恢復(fù)結(jié)果.全部實(shí)驗(yàn)任務(wù)完成后,關(guān)閉測試主機(jī),拆除測試硬盤,重新安裝原始磁盤,恢復(fù)測試主機(jī)正常工作,對測試磁盤執(zhí)行低層格式化操作,徹底清除勒索病毒.
圖8 恢復(fù)結(jié)果統(tǒng)計(jì)分析Fig.8 Statistical analysis of restoration results
實(shí)驗(yàn)結(jié)果顯示,10臺測試主機(jī)內(nèi)全部辦公文檔均被勒索病毒加密,原始文件被刪除,同時勒索病毒未對編輯過程痕跡進(jìn)行加密和刪除處理.圖8(a)顯示的是測試員1記錄的一個被測Excel文檔在磁盤內(nèi)的10次編輯痕跡.其中編輯2和編輯6的痕跡數(shù)據(jù)處于兩分片存儲狀態(tài),其余痕跡未分片.編輯1與編輯6的數(shù)據(jù)內(nèi)容存在局部交叉覆蓋,導(dǎo)致編輯1的痕跡數(shù)據(jù)從0X2800F簇開始的1個簇塊內(nèi)容被覆蓋.編輯5的全部數(shù)據(jù)內(nèi)容和編輯6從0X0B8F簇開始的15個簇塊內(nèi)容被編輯8的痕跡數(shù)據(jù)覆蓋.編輯1和編輯6痕跡數(shù)據(jù)的文件頭均遭到局部覆蓋,首部特征值丟失,X-way無法識別恢復(fù)這兩組痕跡數(shù)據(jù).本文工具可以根據(jù)Office文檔目錄區(qū)數(shù)據(jù)恢復(fù)編輯1和編輯6遺留痕跡數(shù)據(jù),但是這兩組痕跡內(nèi)容殘缺,打開恢復(fù)出的Office文件時提示出錯,但文檔內(nèi)容可以正常查看.除了編輯1、編輯5和編輯6的痕跡數(shù)據(jù)遭到局部或完全覆蓋,其余7組痕跡數(shù)據(jù)完好地遺留在磁盤內(nèi).勒索病毒運(yùn)行之后,第10組痕跡(即當(dāng)前文件內(nèi)容被加密),原始數(shù)據(jù)被密文覆蓋,導(dǎo)致這組痕跡無法還原.本文方法可以完整恢復(fù)出其余6組痕跡數(shù)據(jù),對這個被測Excel文檔的10組編輯痕跡來說,恢復(fù)率為60%,且第9組痕跡與被加密文檔內(nèi)容基本相同.由于編輯2的痕跡數(shù)據(jù)處于兩分片存儲狀態(tài),X-way無法有效恢復(fù),因此X-way的恢復(fù)率為50%.
圖8(b)顯示了10組測試員的平均統(tǒng)計(jì)結(jié)果,按照文件創(chuàng)建時間對文件進(jìn)行分組,即10組測試員第一天建立的10個文檔為第一組,之后每天建立的文檔分為一組,全部100個文檔分為10組,統(tǒng)計(jì)每組文件編輯過程痕跡恢復(fù)率.圖8(b)顯示了10名測試員使用本文方法和X-way恢復(fù)率的平均統(tǒng)計(jì)結(jié)果.通過這組統(tǒng)計(jì)數(shù)據(jù)可見,越晚建立的Office文檔,其編輯過程痕跡恢復(fù)率越高.這是因?yàn)殡S著時間的推移,早前遺留的編輯痕跡遭到局部覆蓋的可能性也在增加.由于本文工具可以有效恢復(fù)分片存儲的Office文檔數(shù)據(jù),因此本文工具在Office文檔恢復(fù)方面,總體效果好于X-way等現(xiàn)有數(shù)據(jù)恢復(fù)工具.
針對勒索病毒加密、刪除辦公文檔分片無法有效恢復(fù)問題,本文提出一種Office電子文檔數(shù)據(jù)分片識別、重組方法,該方法通過ZIP標(biāo)志位和修改時間字段識別全部Office文檔編輯過程數(shù)據(jù)分片,再利用特征值匹配技術(shù)確定一個Office文檔的全部數(shù)據(jù)塊,根據(jù)目錄項(xiàng)確定數(shù)據(jù)塊在文檔內(nèi)的邏輯偏移地址,進(jìn)而完成文檔重組.對重組后的文檔,采用CRC32校驗(yàn)技術(shù)修復(fù)分片邊界數(shù)據(jù)塊識別錯誤.該方法有效解決了分片存儲的Office電子文檔編輯過程痕跡數(shù)據(jù)恢復(fù)問題,可用于感染勒索病毒主機(jī)辦公文檔數(shù)據(jù)恢復(fù)任務(wù).但當(dāng)辦公文檔目錄區(qū)數(shù)據(jù)遭到局部覆蓋時,無法利用目錄區(qū)數(shù)據(jù)重組數(shù)據(jù)塊.針對這一問題,筆者計(jì)劃進(jìn)一步研究不依賴目錄區(qū)數(shù)據(jù)的Office電子文檔數(shù)據(jù)分片識別、重組方法.