国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SQLite3的Android手機(jī)數(shù)據(jù)恢復(fù)技術(shù)研究

2019-11-11 13:14吳玉強(qiáng)王旭
電腦知識(shí)與技術(shù) 2019年27期

吳玉強(qiáng) 王旭

摘要:目前在我國(guó)的手機(jī)市場(chǎng)上,智能手機(jī)主要以IOS、Android為操作系統(tǒng),其中Android手機(jī)中,短信、通話記錄、圖片等多種媒體的存儲(chǔ)方式,都是運(yùn)用SQLite3數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)。以SQLite3 for Android數(shù)據(jù)庫(kù)為主要研究對(duì)象,分析其邏輯結(jié)構(gòu)與物理結(jié)構(gòu),研究數(shù)據(jù)庫(kù)的存儲(chǔ)構(gòu)架,實(shí)驗(yàn)剖析手機(jī)數(shù)據(jù)的存儲(chǔ)刪除在底層數(shù)據(jù)結(jié)構(gòu)上的表現(xiàn),同時(shí)尋找被刪除的殘存文件,研究SQLite3數(shù)據(jù)恢復(fù)技術(shù)的可行性。

關(guān)鍵詞:SQLite3;數(shù)據(jù)庫(kù);Android;數(shù)據(jù)恢復(fù)

中圖分類(lèi)號(hào):TP392? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract: At present, in China's mobile phone market, smartphones mainly use IOS, Android as the operating system. In Android phones, the storage methods of SMS, call records, pictures and other media are all based on SQLite3 database for data storage. Taking the SQLite3 for Android database as the main research object, this paper analyses its logical and physical structure, studies the storage structure of the database, analyzes the performance of the storage and deletion of mobile phone data on the underlying data structure, and searches for the deleted residual files, and studies the feasibility of the data recovery technology of SQLite3.

Key words: SQLite3; database; Android; data recovery

在Android手機(jī)取證中,對(duì)于未刪除的Android智能手機(jī)數(shù)據(jù),調(diào)用手機(jī)API,便能獲取。但是對(duì)于已經(jīng)刪除的數(shù)據(jù)信息,這種調(diào)用API的手段顯然是無(wú)法獲取的。而在對(duì)手機(jī)進(jìn)行取證的很多案件中,我們發(fā)現(xiàn)絕大多數(shù)的犯罪嫌疑人都會(huì)刪除很多與案件有關(guān)的信息,而往往這些數(shù)據(jù)都是認(rèn)罪定性的關(guān)鍵。因此,對(duì)手機(jī)的取證,我們不僅僅是要拿到那些未刪除的數(shù)據(jù),而對(duì)于那些已刪除的很多數(shù)據(jù),如何將其復(fù)原或是獲取,則是取證工作的重中之重。本文從SQLite數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)兩個(gè)角度展開(kāi)研究,以邏輯結(jié)構(gòu)的研究為輔,物理結(jié)構(gòu)的研究為主,了解SQLite在物理層面上的數(shù)據(jù)存儲(chǔ)原理。研究以B-tree樹(shù)形結(jié)構(gòu)為基礎(chǔ)的SQLite數(shù)據(jù)庫(kù)文件的底層數(shù)據(jù)存儲(chǔ)規(guī)則,發(fā)現(xiàn)被刪除的數(shù)據(jù),即“空白頁(yè)”中數(shù)據(jù)存在的可能性,以及嘗試性恢復(fù)。同時(shí),對(duì)收集數(shù)據(jù)進(jìn)行刪除,查看其底層數(shù)據(jù)的變化情況,研究SQLite數(shù)據(jù)庫(kù)被刪除文件恢復(fù)獲取的可能性。

1 Android手機(jī)數(shù)據(jù)恢復(fù)技術(shù)概述

1.1 Android系統(tǒng)概述

Android系統(tǒng)和Windows一樣,有著可視化的用戶界面和操作系統(tǒng),Android系統(tǒng)的運(yùn)行,其實(shí)是建立在虛擬機(jī)中,運(yùn)行時(shí)需要調(diào)用Java語(yǔ)言庫(kù)。與Windows的存儲(chǔ)方式不同的是,應(yīng)用程序以APK的形式保存在Android中。在Android系統(tǒng)的構(gòu)架中,最底層的為L(zhǎng)inux的內(nèi)核層,再往上便是系統(tǒng)運(yùn)行的階層,之后便是構(gòu)成應(yīng)用程序框架的程序框架層,最后便是頂層的應(yīng)用程序?qū)印?/p>

1.2 數(shù)據(jù)恢復(fù)概念

計(jì)算機(jī)中,在刪除、格式化等操作下,丟失的數(shù)據(jù)是可以恢復(fù)的,手機(jī)數(shù)據(jù)恢復(fù)的道理也是這樣。數(shù)據(jù)刪除的時(shí)候,系統(tǒng)在文件分配表上對(duì)該數(shù)據(jù)做上“已刪除 ”的標(biāo)記,保留數(shù)據(jù)的空間,不會(huì)被占用。但是當(dāng)數(shù)據(jù)被徹底刪除時(shí),系統(tǒng)不會(huì)對(duì)數(shù)據(jù)空間進(jìn)行保留,再次寫(xiě)入可能會(huì)造成覆蓋的情況出現(xiàn)。

格式化與刪除相似,在文件分配表上進(jìn)行操作,將所有文件進(jìn)行“刪除”標(biāo)記,或者清空分配表,系統(tǒng)會(huì)認(rèn)為數(shù)據(jù)空白,但真實(shí)的數(shù)據(jù)卻依然存在。數(shù)據(jù)恢復(fù)的理論基礎(chǔ),便是對(duì)數(shù)據(jù)表的恢復(fù),和在空白扇區(qū)搜索數(shù)據(jù)。當(dāng)計(jì)算機(jī)系統(tǒng)無(wú)法進(jìn)入、硬盤(pán)的磁盤(pán)出現(xiàn)損壞導(dǎo)致壞道、文件無(wú)法打開(kāi)、文件內(nèi)容亂碼等現(xiàn)象的出現(xiàn),意味著數(shù)據(jù)可能出現(xiàn)了丟失。

2 SQLite3數(shù)據(jù)庫(kù)架構(gòu)

2.1 SQLite3數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)

SQLite數(shù)據(jù)庫(kù)由邏輯模式、存儲(chǔ)模式、用戶模式這3個(gè)模式結(jié)構(gòu)組成。并且,SQLite數(shù)據(jù)庫(kù)又分為3大子系統(tǒng),以及8個(gè)獨(dú)立的模塊結(jié)構(gòu)組成。

2.2 SQLite3數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)

多重的Btree結(jié)構(gòu),構(gòu)成了SQLite數(shù)據(jù)庫(kù)文件的架構(gòu)。Btree是一種磁盤(pán)存儲(chǔ)樹(shù)形結(jié)構(gòu),它的存在是為了優(yōu)化磁盤(pán)的存儲(chǔ)。一個(gè)Btree結(jié)構(gòu)便是一張表,或是一個(gè)索引。在SQLite數(shù)據(jù)庫(kù)文件中,表的數(shù)據(jù)與索引,兩者的結(jié)構(gòu)是不同的,表數(shù)據(jù)的結(jié)構(gòu)為B+Tree;索引的結(jié)構(gòu)為B-Tree。Btree結(jié)構(gòu)的計(jì)算節(jié)點(diǎn)為頁(yè),所以Btree最小也會(huì)有一頁(yè)的大小。根據(jù)存儲(chǔ)介質(zhì)的不同,對(duì)“頁(yè)”的大小的定義也不相同,許多磁盤(pán)的定義一頁(yè)為1024字節(jié),但是本次實(shí)驗(yàn)的磁盤(pán)中,定義一頁(yè)的大小為4096字節(jié)。“根頁(yè)”位于數(shù)據(jù)庫(kù)的起始位置。數(shù)據(jù)區(qū)的內(nèi)容存儲(chǔ)在Payload中,為平級(jí)向后鋪列。

3 基于SQLite3的Android手機(jī)數(shù)據(jù)恢復(fù)實(shí)驗(yàn)

SQLite3數(shù)據(jù)庫(kù)文件在文件大小小于一頁(yè)的情況下(本次實(shí)驗(yàn)中的一頁(yè)為4096字節(jié)),即使再次寫(xiě)入,也不會(huì)發(fā)生覆蓋。而當(dāng)刪除內(nèi)容大于一頁(yè)時(shí),也就是4096字節(jié),該頁(yè)會(huì)被定義為空白頁(yè),再次寫(xiě)入,會(huì)造成覆蓋。根據(jù)SQLite3數(shù)據(jù)庫(kù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和原理,被刪除的數(shù)據(jù)是可通過(guò)地址查找,找到刪除的數(shù)據(jù),從而進(jìn)行提取。通過(guò)winhex查看Android手機(jī)中對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件,搜索數(shù)據(jù)庫(kù)中各表的位置,從而發(fā)現(xiàn)刪除的存儲(chǔ)區(qū)域。Android手機(jī)的通訊錄、短信、照片等數(shù)據(jù),都是通過(guò)SQLite3數(shù)據(jù)庫(kù)進(jìn)行管理,本實(shí)驗(yàn)將對(duì)手機(jī)短信數(shù)據(jù)庫(kù)(mmssmms.db)進(jìn)行分析研究。

3.1 SQLite3數(shù)據(jù)庫(kù)文件分析實(shí)驗(yàn)

3.1.1鏡像制作

通過(guò)手機(jī)鏡像制作工具,對(duì)手機(jī)制作物理鏡像。手機(jī)品牌:華為;型號(hào):MT7-CL00,手機(jī)系統(tǒng):Android 6.0。

3.1.2 數(shù)據(jù)庫(kù)根頁(yè)分析

使用winhex打開(kāi)鏡像文件userdata.dd,在\data\com.android.providers.telephony\databases目錄下,找到短信數(shù)據(jù)庫(kù)文件mmssms.db。根頁(yè)磁盤(pán)的情況如圖1中選中區(qū)域所示:

3.1.3 SQLite_master表分析

SQLite_master表情況如圖3-1中未選中區(qū)域所示。其中,0X05:本頁(yè)為內(nèi)部頁(yè);0X0000:第1個(gè)自由塊的偏移量。此處為0,表示本頁(yè)沒(méi)自由塊;0X0008:本頁(yè)總計(jì)8個(gè)單元;0X0FD8:該單元的起始位置:4056(絕對(duì)地址),12字節(jié)后,0X0FFB、0X0FF6、0X0FF1、0X0FEC、0X0FE7、0X0FE2、0X0FDD、0X0FD8分別為8個(gè)單元的起始位置;0X00:碎片的字節(jié)數(shù),此處為0;0X0000005D:最后子葉的單元指針頁(yè)號(hào)。由于本頁(yè)有8個(gè)單元,所以此處即指針(8)。其值為0X005D,即指針(8)指向第93頁(yè)。第93頁(yè)是表數(shù)據(jù)的最后一頁(yè)。在0X0FD8后可以看到還有16個(gè)字節(jié)信息,這些信息就是被覆蓋前的原始信息。

3.1.4 單元內(nèi)容區(qū)分析

6558D000+FD8=6558DFD8,得到單元內(nèi)容區(qū)的起始地址為6558DFD8。

手機(jī)短信數(shù)據(jù)庫(kù)mmssms.db的B+Tree的結(jié)構(gòu)如表1所示:

3.1.5 葉子頁(yè)分析

此時(shí)Payload數(shù)據(jù)的前四個(gè)字節(jié)發(fā)生了改變,而短信內(nèi)容沒(méi)有發(fā)生任何改變,前兩個(gè)字節(jié)表示下一個(gè)自由塊的起始地址為0X00;后兩個(gè)字節(jié)表示該自由塊的大小為0X00AD,173個(gè)字節(jié),正好為刪除空間大小。

第二次實(shí)驗(yàn),為了與中文短信進(jìn)行對(duì)比,我們用手機(jī)號(hào)183XXXX7703的手機(jī)給實(shí)驗(yàn)手機(jī)發(fā)送了一條英文短信,短信內(nèi)容為“this is a test,if received,succeed!?。?49455”。

通過(guò)搜索,找到此段英文對(duì)應(yīng)的數(shù)據(jù)區(qū),其對(duì)應(yīng)的Payload數(shù)據(jù)如圖7,英文字母在ascii中占2個(gè)字節(jié),是可以直接顯示出來(lái)的。

同樣,對(duì)比圖7和圖8,前四個(gè)字節(jié)發(fā)生了變化,而數(shù)據(jù)內(nèi)容沒(méi)有發(fā)生變化。改變的前四個(gè)字節(jié)所代表的含義是:1、前兩個(gè)字節(jié)表示下一個(gè)自由塊的起始地址0X00;2、后兩個(gè)字節(jié)表示該自由塊的大小0X0067,103個(gè)字節(jié)。可以發(fā)現(xiàn)自由塊的大小值比刪除前單元的記錄內(nèi)容大小值多了2,也就是說(shuō)自由塊的大小值記錄的是刪除前整個(gè)單元的大小。

3.3 數(shù)據(jù)覆蓋實(shí)驗(yàn)

SQLite3數(shù)據(jù)庫(kù)在數(shù)據(jù)內(nèi)容沒(méi)有達(dá)到“一頁(yè)”(一頁(yè)在本數(shù)據(jù)庫(kù)文件中為4096字節(jié))的大小時(shí),數(shù)據(jù)庫(kù)不會(huì)對(duì)數(shù)據(jù)進(jìn)行重新整理,數(shù)據(jù)庫(kù)文件大小不變,而即使數(shù)據(jù)已經(jīng)被刪除,也不會(huì)被覆蓋;而當(dāng)刪除的內(nèi)容達(dá)到一頁(yè)的大小時(shí),會(huì)對(duì)數(shù)據(jù)進(jìn)行重新整理,數(shù)據(jù)庫(kù)文件大小會(huì)變小,重新寫(xiě)入,數(shù)據(jù)會(huì)被覆蓋。

我們依然選取交通銀行的短信作為實(shí)驗(yàn)對(duì)象,以下是交通銀行短信的部分通知內(nèi)容,如圖9所示。

現(xiàn)在,我們將手機(jī)中的短信全部刪除,刪除短信的大小遠(yuǎn)遠(yuǎn)超過(guò)了4096字節(jié),再次對(duì)手機(jī)進(jìn)行鏡像的制作,在鏡像中查看原地址的內(nèi)容,和上述實(shí)驗(yàn)結(jié)果一樣,只是文件頭發(fā)生了變化,具體圖省略。

接下來(lái)進(jìn)行覆蓋實(shí)驗(yàn)。我們將發(fā)送5條短信,每條短信中分別是500個(gè)a,也就是1000字節(jié),五條短信的總大小就是5000字節(jié)。

再次制作鏡像,在原來(lái)地址處查看文件,文件的數(shù)據(jù)如圖10所示:

從上面的圖中可以發(fā)現(xiàn),藍(lán)色區(qū)域的原始數(shù)據(jù)已經(jīng)被覆蓋,而剩余區(qū)域沒(méi)有被覆蓋,仍然處于空白區(qū)域,未被寫(xiě)入。

3.4 實(shí)驗(yàn)總結(jié)

本次實(shí)驗(yàn),一共進(jìn)行了四次實(shí)驗(yàn),分別是短信數(shù)據(jù)的逐層尋找,以及兩次刪除實(shí)驗(yàn),三次覆蓋實(shí)驗(yàn)。其中,手機(jī)鏡像制作7次,中文短信刪除實(shí)驗(yàn)前后對(duì)比需要兩次鏡像,英文短信刪除實(shí)驗(yàn)需要兩次鏡像,以及后續(xù)的覆蓋實(shí)驗(yàn)也需要兩次鏡像,這樣的目的是為了防止數(shù)據(jù)出現(xiàn)覆蓋,導(dǎo)致實(shí)驗(yàn)數(shù)據(jù)存在偏差。

實(shí)驗(yàn)證明,基于SQLite3數(shù)據(jù)庫(kù)的手機(jī)數(shù)據(jù)恢復(fù)取證是可行的,被刪除數(shù)據(jù)的內(nèi)容是不會(huì)改變的,但是數(shù)據(jù)的葉子頁(yè)頭會(huì)發(fā)生變化,將這一數(shù)據(jù)表明為“自由塊”,在本頁(yè)沒(méi)有全部刪除的情況下,是不會(huì)進(jìn)行覆蓋的,數(shù)據(jù)庫(kù)文件的大小不變,即使寫(xiě)入,也不會(huì)出現(xiàn)覆蓋,所以存在取證的可能性。但是,在此頁(yè)的數(shù)據(jù)被全部刪除的情況下,數(shù)據(jù)庫(kù)文件的大小會(huì)變小,此時(shí)若是寫(xiě)入,便會(huì)出現(xiàn)數(shù)據(jù)覆蓋的情況,較難恢復(fù)。所以,在單獨(dú)刪除少量信息(少于一頁(yè))的情況下,被刪除的對(duì)象可以被恢復(fù);對(duì)于大批量刪除,并在后續(xù)進(jìn)行寫(xiě)入的情況下,原始數(shù)據(jù)會(huì)被進(jìn)行覆蓋,恢復(fù)的難度較大,并且?guī)缀醪豢赡苋炕謴?fù)。

不過(guò),上述的技術(shù)實(shí)驗(yàn)也要分情況,比如說(shuō)數(shù)據(jù)庫(kù)文件對(duì)“頁(yè)”大小的定義就會(huì)根據(jù)存儲(chǔ)方式的不同而不同,一些手機(jī)中一“頁(yè)”指的是1024字節(jié),而本次實(shí)驗(yàn)的手機(jī)中,一“頁(yè)”的大小為4096個(gè)字節(jié)。一些參考文獻(xiàn)所提供的數(shù)據(jù)也有著些許的偏差,比如對(duì)于“數(shù)據(jù)子葉”的位置的定義,一些文獻(xiàn)中指出子葉的位置是以前往后的,但是實(shí)驗(yàn)數(shù)據(jù)卻顯示,子葉的位置未必是對(duì)應(yīng)著頁(yè)號(hào)從前往后,刪除等行為會(huì)造成數(shù)據(jù)庫(kù)文件的重新整編,從而導(dǎo)致邏輯位置上最左側(cè)子葉,不是第一子葉的情況出現(xiàn)。

4 小結(jié)

本文的研究對(duì)Android手機(jī)中SQLite3數(shù)據(jù)庫(kù)的恢復(fù)和取證具有一定的參考價(jià)值和指導(dǎo)意義,基于SQLite3的Android手機(jī)數(shù)據(jù)恢復(fù)的可能性是巨大的,當(dāng)了解到每一個(gè)字節(jié)的意義后,就會(huì)清楚每一部分的用處,從而可以在空白區(qū)域?qū)ふ矣杏脭?shù)據(jù),進(jìn)行數(shù)據(jù)恢復(fù)。通過(guò)對(duì)底層數(shù)據(jù)的讀取,以及對(duì)規(guī)則的算法設(shè)計(jì),可以實(shí)現(xiàn)基于SQLite3的Android手機(jī)數(shù)據(jù)恢復(fù)軟件工具的制作。

參考文獻(xiàn):

[1]杜國(guó)祥,石俊杰.SQLite嵌入式數(shù)據(jù)庫(kù)的應(yīng)用[J].電腦編程技巧與維護(hù),2010(14):43-47.

[2]韓善鋒,曹鳳海,易昌華.SQLite數(shù)據(jù)庫(kù)在嵌入式程序開(kāi)發(fā)中的應(yīng)用[J].物探裝備,2011,21(03):170-173+178.

[3]吳昊,陳立全,沙晶,喬志,吳中奇.一種基于特征匹配定位的SQLite數(shù)據(jù)恢復(fù)方法[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2018,38(01):106-112.

[4]葉清明. 基于MDA的SQLite碎片數(shù)據(jù)清除技術(shù)的研究[D].昆明理工大學(xué),2016.

[5]王昌紅.恢復(fù)手機(jī)上的被刪除的資料[J].電腦知識(shí)與技術(shù)(經(jīng)驗(yàn)技巧),2017(11):21-24.

[6]馬獲蕾,湯海鳳.Android系統(tǒng)中SQLite數(shù)據(jù)庫(kù)的研究[J].電腦知識(shí)與技術(shù),2013,9(28):6243-6245+6256.

[7]胡偉.SQLite在嵌入式系統(tǒng)上的實(shí)現(xiàn)研究[J].計(jì)算機(jī)與數(shù)字工程,2009,37(02):158-163.

[8]許如峰,楊明武,張青春,邱換春.紅黑樹(shù)優(yōu)化的SQLite索引在測(cè)速系統(tǒng)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2018,41(04):52-55+59.

【通聯(lián)編輯:王力】