本發(fā)明涉及信息安全中數(shù)字取證技術(shù)領(lǐng)域,尤其涉及一種基于Hash的YAFFS2文件各版本恢復(fù)方法。
背景技術(shù):
隨著移動智能終端技術(shù)的快速發(fā)展,智能終端已經(jīng)成為人們?nèi)粘9ぷ?、生活中必不可少的工具。正是由于智能終端的普及,一些犯罪分子開始利用其進(jìn)行違法犯罪,所以為了從智能終端中獲得有效的證據(jù)信息就需要對智能終端進(jìn)行取證。智能終端取證包含了IOS取證、Android取證、Windows Phone取證等,其中Android系統(tǒng)的智能終端其市場占有率高達(dá)80%,并且Android系統(tǒng)是開源的智能終端系統(tǒng),因此需要對Android取證的研究很有必要。
在Android取證中,包含了很多方面的研究,其中數(shù)據(jù)恢復(fù)技術(shù)方法的研究可幫助恢復(fù)、獲得Android設(shè)備中數(shù)據(jù)信息,特別是對已刪除或是修改過的數(shù)據(jù)文件都很有可能對后續(xù)地分析取證產(chǎn)生很大的影響。而YAFFS2文件系統(tǒng)是主要應(yīng)用于Android系統(tǒng)下如手機(jī)、PAD等移動智能終端設(shè)備中的一種新興的快速閃存文件系統(tǒng)。
并且目前,對于YAFFS2文件恢復(fù)方面的研究主要是基于反向掃描的方法獲取文件系統(tǒng)中的數(shù)據(jù)信息,但是會存在反復(fù)掃描文件系統(tǒng)、讀取其中數(shù)據(jù)的現(xiàn)象,該現(xiàn)象會增加方法的時(shí)間復(fù)雜度,并且在這些方法中并沒有考慮到文件在刪除前,或被修改后,文件之前版本中文件內(nèi)容的情況,僅僅考慮了最新版本的文件恢復(fù)。
技術(shù)實(shí)現(xiàn)要素:
針對上述問題中存在的不足之處,本發(fā)明提供一種基于Hash的YAFFS2文件各版本恢復(fù)方法。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于Hash的YAFFS2文件各版本恢復(fù)方法,其特征在于,包括:
步驟1、對整個(gè)YAFFS2文件系統(tǒng)進(jìn)行掃描,獲取文件系統(tǒng)中所有的Block塊信息并按照Block塊的序列號從大至小排序;
步驟2、所有Block塊按照序列號從大到小進(jìn)行掃描,每個(gè)Block塊按照Block塊中chunk塊id值由大到小進(jìn)行掃描,獲取object對象信息和chunk塊信息,并將object對象信息和chunk信息存入chunkInfo[]中;所述object對象信息包括對象id和對象類型,所述chunk信息包括chunk id、chunk類型和chunk大??;
步驟3、根據(jù)對象類型將chunkInfo[]中的信息進(jìn)行分類,并通過每個(gè)chunkinfo[j]中j所對應(yīng)的chunk塊內(nèi)容進(jìn)行讀取,獲取目錄對象頭信息和文件對象頭信息。目錄對象頭信息包括:目錄名、父對象id;文件對象頭信息包括:文件名、對象id、父對象id、文件大小、文件的三個(gè)時(shí)間戳。
步驟4、對所述文件對象頭信息中每個(gè)文件的時(shí)間戳進(jìn)行分析,建立文件操作與時(shí)間戳之間的關(guān)聯(lián),獲得文件的版本、文件操作信息,并將版本、文件操作信息以及步驟3中獲得的文件對象頭信息存入File[]中;對File[]進(jìn)行掃描將其中只出現(xiàn)一次的對象id的File[]保存并直接跳到步驟6中對File[]中對應(yīng)文件進(jìn)行恢復(fù),并將具有相同對象id的File[],以對象id作為Hash鏈表鍵值,以File[]作為存儲對象存入Hash鏈表中;
步驟5、將步驟3中的目錄信息存入Dir[]中;
步驟6、恢復(fù)Dir[]中目錄信息,再將Hash鏈表中File[]的文件信息和步驟4中只出現(xiàn)一次對象id的File[]中的文件信息對應(yīng)恢復(fù)到各目錄下,實(shí)現(xiàn)YAFFS2文件各版本恢復(fù)。
作為本發(fā)明的進(jìn)一步改進(jìn),在步驟4中,所述時(shí)間戳的分析方法包括:
步驟4-1、獲得時(shí)間戳:
通過讀取文件對象頭獲得每個(gè)版本文件的三個(gè)時(shí)間戳,并根據(jù)所獲得的時(shí)間戳來獲得該文件三種時(shí)間戳的間的大小序列S和最大值Θ;所述三個(gè)時(shí)間戳為訪問時(shí)間戳、修改時(shí)間戳和創(chuàng)建時(shí)間戳;
步驟4-2、分析時(shí)間戳:
依據(jù)S和文件操作對時(shí)間戳影響規(guī)則,判斷該版本文件與文件操作間的對應(yīng)關(guān)系r;
步驟4-3、確定時(shí)間戳序列:
所述4-3在File[]存入Hash鏈表后執(zhí)行。在Hash鏈表中根據(jù)相同鍵值、文件名相同的File[]間,即是對一個(gè)文件的不同版本依據(jù)其中的Θ對對應(yīng)關(guān)系r進(jìn)行排序,獲得唯一的文件操作與各版本時(shí)間戳間的對應(yīng)關(guān)系,確定文件的版本號。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟6包括:
步驟6-1、對于Dir[]中目錄信息的處理:將所有Dir[]中的信息依次遍歷,創(chuàng)建路徑并通過Dir[]中的父對象id判斷目錄層級,按層級創(chuàng)建目錄到指定文件夾;
步驟6-2、對Hash鏈表中的File[]文件信息處理:通過將Hash鏈表中同一鍵值的多個(gè)文件對象頭信息提取,通過文件大小判斷每一個(gè)版本文件所對應(yīng)的chunk數(shù)據(jù)塊,對文件進(jìn)行重構(gòu),使得每一個(gè)版本文件的對象頭信息和其數(shù)據(jù)塊拼接在一起,實(shí)現(xiàn)YAFFS2文件各版本恢復(fù)。
作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟6-2中,將重構(gòu)的各版本文件按其數(shù)據(jù)塊依次寫入與文件相對應(yīng)的目錄中,文件每一個(gè)數(shù)據(jù)塊的寫入都需要找到其chunk塊對應(yīng)的物理地址;該物理地址的獲取方法,首先根據(jù)Block[i]中的i獲得Block塊的物理地址,而每個(gè)chunk又對應(yīng)了一個(gè)chunkinfo[j],就可依據(jù)Block[]和chunkinfo[]二者來推斷該chunk的物理地址,讀取其中的文件數(shù)據(jù),再將其寫入恢復(fù)文件路徑下的文件中,實(shí)現(xiàn)文件的恢復(fù)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
本發(fā)明公開的一種基于Hash的YAFFS2文件各版本恢復(fù)方法,通過對時(shí)間戳分析,建立了時(shí)間戳與文件操作的關(guān)聯(lián)性,并以此可獲得文件的時(shí)間序列和文件的各個(gè)版本號,并且通過引入Hash鏈表對文件對象頭存儲,有助于方便快捷的對同一對象頭id的不同版本文件進(jìn)行恢復(fù),從而獲得多個(gè)版本的文件為后續(xù)取證分析工作打下基礎(chǔ)。
附圖說明
圖1為本發(fā)明一種實(shí)施例公開的基于Hash的YAFFS2文件各版本恢復(fù)方法的流程圖;
圖2為本發(fā)明一種實(shí)施例公開的Hash鏈表結(jié)構(gòu);
圖3為本發(fā)明一種實(shí)施例公開的時(shí)間戳分析方法流程圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
為了解決目前數(shù)據(jù)恢復(fù)中僅對數(shù)據(jù)最新版本進(jìn)行恢復(fù)而忽視了數(shù)據(jù)被修改前版本的問題,本發(fā)明提出了一種基于Hash的YAFFS2文件各版本恢復(fù)方法,通過對每個(gè)文件對象頭時(shí)間戳分析,獲得文件操作與文件時(shí)間戳間的關(guān)聯(lián),進(jìn)而獲得文件的版本、操作信息,通過Hash鏈表存儲同一文件中不同版本的文件對象頭,最終實(shí)現(xiàn)對文件各個(gè)版本的恢復(fù)。
本發(fā)明所設(shè)計(jì)的基于Hash的YAFFS2文件各版本恢復(fù)方法遵循YAFFS2文件系統(tǒng)中不復(fù)寫的原則特點(diǎn),即YAFFS2每次對文件進(jìn)行修改都會在新的chunk塊中產(chǎn)生一個(gè)新的對象頭,并在新chunk中寫入修改后的數(shù)據(jù)。
下面結(jié)合附圖對本發(fā)明做進(jìn)一步的詳細(xì)描述:
如圖1-3所示,本發(fā)明提供一種基于Hash的YAFFS2文件各版本恢復(fù)方法,包括:
步驟1:掃描整個(gè)文件系統(tǒng)。
本方法中對文件系統(tǒng)的掃描方法采用了反向掃描的方法,該方法是從最后一個(gè)塊向前掃描,從而可確保每一個(gè)塊中信息均可獲取。因此在這一步驟中,我們掃描整個(gè)NAND閃存,從OOB區(qū)域中提取Block塊信息,并將Block塊按照從大到小排列,從而可以確保掃描到每一個(gè)Block塊,并且為后續(xù)對每個(gè)Block塊的每一個(gè)chunk塊進(jìn)行掃描打下基礎(chǔ)。
步驟2:獲得各對象、chunk信息
在掃描過程中,在獲得Block[N]的同時(shí)也對每一個(gè)Block進(jìn)行掃描,也是由后向前掃描Block[i]中的每個(gè)chunk塊直到chunkid為0,一個(gè)Block[i]塊掃描完成。并且在這個(gè)過程中,可以獲得object id、chunk id、object type、chunk type以及chunk size等信息,并將這些信息存入chunkInfo[]中。
步驟3:存儲各版本文件信息到Hash鏈表
在YAFFS2文件系統(tǒng)中對于文件和目錄它們所擁有的對象類型object type是不同的。然后可依據(jù)2.2YAFFS2文件系統(tǒng)數(shù)據(jù)特點(diǎn)中表2和表3的介紹,判斷對象的類型,如在目錄類型的對象中其object type=0x30,而在文件類型的對象中其object type=0x10。根據(jù)這一區(qū)別可以將所獲取到的chunkinfo[]信息進(jìn)行判別分類,從而獲得目錄Dir[]和文件File[]。
再依據(jù)YAFFS2文件不復(fù)寫原則,對于同一個(gè)文件其對象頭塊和數(shù)據(jù)塊是具有相同的object id,而且同一文件的每一個(gè)版本都具有一個(gè)新的對象頭塊,就可將File[]中具有相同對象頭id的文件,通過object id計(jì)算Hash鏈表中的鍵值,將其所對應(yīng)的File[]信息存入Hash鏈表中,圖2展現(xiàn)了Hash鏈表結(jié)構(gòu),Hash鏈表中每個(gè)節(jié)點(diǎn)都包含三部分分別是對象頭id,F(xiàn)ile文件信息以及指向下一個(gè)節(jié)點(diǎn)的指針,其中的對象頭id用于計(jì)算Hash鏈表中的鍵值,通過不同的鍵值對應(yīng)存入Hash表中。
并且在該步驟中獲得文件信息后,需要對時(shí)間戳進(jìn)行分析;如圖3所示,時(shí)間戳的分析方法主要包含三個(gè)步驟分別是獲得時(shí)間戳、分析時(shí)間戳和最后確定時(shí)間戳序列
3.1獲得時(shí)間戳。從文件對象頭塊中獲取每個(gè)版本文件的三個(gè)時(shí)間戳,分別是訪問、修改、創(chuàng)建時(shí)間戳,然后對三個(gè)時(shí)間戳間的關(guān)系進(jìn)行比較獲得該版本文件的時(shí)間戳序列S,并且每個(gè)版本文件的時(shí)間戳集用T表示,每個(gè)。并且同時(shí)計(jì)算三個(gè)時(shí)間戳中的最大值Θ。
3.2分析時(shí)間戳。通過前一步中所獲得的S,通過與文件規(guī)則間的判斷,獲得每個(gè)T與文件操作o的對應(yīng)關(guān)系r。
3.3確定時(shí)間戳序列。通過對同一文件所獲得的關(guān)聯(lián)關(guān)系r,依據(jù)之前第一步中計(jì)算的每個(gè)T的時(shí)間戳最大值Θ來進(jìn)行排序,從而可確定每個(gè)版本文件T與o唯一的對應(yīng)關(guān)系,并且確定該文件不同版本發(fā)生的時(shí)間序列、文件操作以及文件版本號。
步驟4:恢復(fù)各版本文件
在該步驟中,首先是對于Dir[]中目錄信息的處理,將所有Dir[]中的信息依次遍歷,創(chuàng)建路徑并按其目錄層級創(chuàng)建對應(yīng)的目錄到指定文件夾中。然后是對Hash鏈表中的File[]文件信息處理。通過將Hash鏈表中同一文件的多個(gè)文件對象頭塊提取,通過文件大小判斷每一個(gè)版本文件所對應(yīng)的chunk數(shù)據(jù)塊,對文件進(jìn)行重構(gòu),使得每一個(gè)版本文件的對象頭塊和其數(shù)據(jù)塊拼接在一起,從而幫助實(shí)現(xiàn)文件的恢復(fù)。
并且最后將所重構(gòu)的各版本文件按其數(shù)據(jù)塊依次寫入與文件相對應(yīng)的目錄中,由于文件每一個(gè)數(shù)據(jù)塊的寫入都需要找到其chunk塊對應(yīng)的物理地址,該物理地址的獲取方法,首先根據(jù)Block[i]中的i獲得Block塊的物理地址,而每個(gè)chunk又對應(yīng)了一個(gè)chunkinfo[j],就可依據(jù)Block[]和chunkinfo[]二者來推斷該chunk的物理地址,讀取其中的文件數(shù)據(jù),再將其寫入恢復(fù)文件路徑下的文件中,實(shí)現(xiàn)文件的恢復(fù),達(dá)到算法的最終目標(biāo)。
本發(fā)明公開的一種基于Hash的YAFFS2文件各版本恢復(fù)方法,通過對時(shí)間戳分析,建立了時(shí)間戳與文件操作的關(guān)聯(lián)性,并以此可獲得文件的時(shí)間序列和文件的各個(gè)版本號,并且通過引入Hash鏈表對文件對象頭存儲,有助于方便快捷的對同一對象頭id的不同版本文件進(jìn)行恢復(fù),從而獲得多個(gè)版本的文件為后續(xù)取證分析工作打下基礎(chǔ)。
以上僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。