楊衛(wèi)軍 張佩軍 溫萬造
1. 中國人民公安大學
2. 公安部第一研究所
3. 北京網(wǎng)絡行業(yè)協(xié)會電子數(shù)據(jù)司法鑒定中心
目前智能手機越來越普遍,它安裝有獨立的操作系統(tǒng),市面上流行操作系統(tǒng)主要有Apple的 IOS、Android和Windows Mobile、Symbian、Blackberry的RIM等,其中基于Android系統(tǒng)的智能手機在市場中占有份額最多。智能手機不僅可以發(fā)信息、打電話、拍照、上網(wǎng)和玩游戲等,還可以安裝由第三方提供的各類應用程序,比如手機銀行客戶端、QQ聊天等。智能手機在方便用戶的同時,與其相關的違法犯罪活動也越來越多,如短信詐騙、隱私竊取、非法轉賬交易等。手機里存儲的各類信息,如短信、電子郵件、銀行轉賬、股票交易、聊天記錄等,對案件偵查和訴訟活動將會起到非常重要的作用。本文主要探討Android系統(tǒng)智能手機的短信獲取與恢復方法。
Android為開放源代碼的智能移動操作系統(tǒng),它的文件系統(tǒng)隨著版本、手機品牌和型號的不同而不同,比較典型的有采用針對NAND 設備的新型文件系統(tǒng)YAFFS2(Yet Another Flash File System 2),此外還有EXT2、EXT3等;其系統(tǒng)構架自上而下分為應用層、應用框架層、系統(tǒng)運行庫層、Linux內(nèi)核層四層架構。
Android系統(tǒng)運行時采用Dalvik虛擬機機制,每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例,Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統(tǒng)。在Android手機取證過程中,Android操作系統(tǒng)“/data”路徑下的SQLite數(shù)據(jù)庫應該是關注的焦點,因為通訊錄、通話記錄、短信、QQ聊天記錄、上網(wǎng)記錄和網(wǎng)頁緩存等都存在與其對應的DB文件內(nèi)。
本文以一款國產(chǎn)Android智能手機ZTE-T9為例,介紹SQLite數(shù)據(jù)庫文件的獲取。
(1) 工具準備
·Winhex:一款以通用的16進制編輯器為核心,專門用來進行計算機取證、數(shù)據(jù)恢復、低級數(shù)據(jù)處理以及安全分析等日常緊急情況的數(shù)據(jù)分析工具;
·ADB:全稱Android Debug Bridge,是Android SDK里的一種工具,用這個工具可以直接操作管理Android模擬器或者真實的Android設備,是一個客戶端-服務器端的程序,其中客戶端是用來操作的電腦,服務器端是Android設備;
(2) 安裝手機驅動及ADB工具,將手機連接電腦,并在手機“USB設置”里選擇“USB調(diào)試模式”;
(3) 在命令行下輸入“adb devices”,會出現(xiàn)連接設備的名稱,如圖1所示。
然后使用pull命令將文件下載到本地計算機,“adb pull/data /ceshi”,下載完成后會出現(xiàn)如圖2所示的內(nèi)容,并在本地計算機生成如圖3所示的文件夾。
如圖4所示,如果使用該命令時出現(xiàn)提示“0 files pulled. 0 files skipped”,表明下載失敗,說明該手機尚未獲得Root權限,需要先Root該手機。
(4) 在本地文件夾“datacom.android.providers.Telephonydatabases”路徑下的文件mmssms.db,即為保存短消息的SQLite數(shù)據(jù)庫文件。
(1)可見短信內(nèi)容存儲在“datacom.android.Providers.telephonydatabase”中的文件mmssms.db中,通過查看該文件sms表內(nèi)容即可提取出所有可見短信。
測試數(shù)據(jù)庫內(nèi)共有3條記錄,均為收到的短消息,數(shù)據(jù)庫表sms的內(nèi)容如圖5所示。
(2) SQLite數(shù)據(jù)庫的文件結構、數(shù)據(jù)記錄的尋址方式解析如圖6所示。
如圖6所示,SQLite文件頭信息中第一頁內(nèi)偏移00H-0FH為SQLite文件的文件簽名,10H-11H(2字節(jié))為頁大小,一般頁大小為0400H,即1024字節(jié)。數(shù)據(jù)表首頁的0-7共8個字節(jié)為頁頭,第0字節(jié)位為標志位(ODH或05 H),第1-2字節(jié)為該頁內(nèi)空余空間首字節(jié)的偏移量,第3-4字節(jié)為該頁內(nèi)記錄數(shù),第5-6字節(jié)為最近1個記錄首字節(jié)的偏移量,第7個字節(jié)為空余字節(jié)碎片的數(shù),之后每兩個字節(jié)表示一個記錄首字節(jié)的相對偏移量。記錄指針(每條記錄的首字節(jié)偏移量)和數(shù)據(jù)區(qū)的存儲模型如圖7所示。
圖7 頁結構
(3)刪除短信的恢復
若將第二條短消息刪除,然后再獲取mmssms.db文件,數(shù)據(jù)庫表sms的內(nèi)容如圖8所示。
與原文件進行十六進制比對,發(fā)現(xiàn)頁頭中“空余空間的首字節(jié)的偏移量”由0000H被修改為012FH,“記錄數(shù)”由0003H被修改為0002H,原第三個記錄的“首字節(jié)的相對偏移量”占領原第二個記錄的指針位置,如圖9所示。
同時,存儲第二條短信的數(shù)據(jù)區(qū)第0-3的前4個字節(jié)由原來的826C0219H被修改為0000016FH,如圖10所示。刪除后,該條記錄的第0-1字節(jié)標示“下一個空閑空間的偏移量”,第2-3個字節(jié)標示“該空閑空間的邏輯長度”。
按照數(shù)據(jù)記錄的尋址方式,首先獲取“空余空間首字節(jié)的偏移量”012FH,跳轉至地址,讀取“該空閑空間的邏輯長度”016FH,將其按照mmssms.db數(shù)據(jù)庫的表結構和字符類型進行解碼,即可完整恢復該條記錄的內(nèi)容??梢允褂肳inhex將提取到的數(shù)據(jù)添加到一個內(nèi)容為空且編碼為UTF-8格式的TXT文件的尾部并保存,打開該文本文件即可看到該條短信的內(nèi)容、發(fā)送號,如圖11所示。
因此,對該數(shù)據(jù)表每個頁的空余空間進行收集,可以得出短信恢復的模型,如圖12所示。
手機取證必須在法律允許的條件下,通過技術手段獲取手機上的數(shù)據(jù)作為訴訟證據(jù)或案件線索。對Android系統(tǒng)智能手機的取證和短信恢復工作,需注意以下幾點:
(1)辦案人員在扣押(調(diào)?。┲悄苁謾C時切忌像扣押電腦那樣將其斷電關機,扣押(調(diào)?。r要將手機設置為飛行模式或裝入手機屏蔽袋,防止扣押(調(diào)?。┻^程中有電話打入或短信接收,造成空余空間內(nèi)原始數(shù)據(jù)的覆蓋。
(2)確保手機有足夠的電量??梢允褂檬謾C電源線,在信號屏蔽的環(huán)境下及時對手機進行充電,以防在取證分析時手機因電量不足而關機。因為SQLite數(shù)據(jù)庫內(nèi)的表記錄被刪除后,數(shù)據(jù)區(qū)不會被立即清除,但大量刪除記錄并重啟后,SQLite文件的大小會變小,所以在取證的過程中,必須保證手機有足夠的電量。
(3)在對手機機身進行數(shù)據(jù)獲取前,首先對手機SD卡的原始數(shù)據(jù)進行鏡像,然后對鏡像文件進行分析。
(4)對手機機身數(shù)據(jù)進行獲取后,還要對SIM卡中的數(shù)據(jù)進行提取和恢復。
(5)目前,帶數(shù)據(jù)恢復功能的手機取證軟件及數(shù)據(jù)恢復軟件較少,且提取與恢復效果較差,尤其是短信恢復能力有強有弱,要嘗試使用多種軟件進行數(shù)據(jù)恢復。
(6)分析被恢復出廠設置的手機,應該借助其他工具對手機機身數(shù)據(jù)做物理鏡像。采用Encase7等分析工具,對物理鏡像的空余空間和文件殘留區(qū)進行數(shù)據(jù)分析和恢復。
(1)一部分Android 手機在出廠或者安裝操作系統(tǒng)時已經(jīng)取得Root權限,但大部分Android手機仍須先進行Root權限破解,而谷歌公司也在不斷地修復漏洞,升級Android 系統(tǒng)的版本。因此,需進一步挖掘如何利用Android 系統(tǒng)的漏洞來獲得Root 權限的技術。
(2)當前對Android系統(tǒng)手機進行數(shù)據(jù)完全鏡像備份的工具還較少,對Android系統(tǒng)手機取證工作還主要停留在可見數(shù)據(jù)的獲取階段,恢復數(shù)據(jù)的能力還需要進一步提高。
(3)目前我國自主研發(fā)的帶恢復功能的手機取證工具還不是很成熟,且價格昂貴。
(4)目前國內(nèi)尚沒有與Android系統(tǒng)手機取證的技術標準和規(guī)范,且不同廠商對SQLite數(shù)據(jù)庫表結構的定義不統(tǒng)一,單靠軟件程序自動恢復處理難以覆蓋全部Android設備,某些設備的數(shù)據(jù)恢復工作需要實驗室專業(yè)分析人員手動進行。
本文就Android系統(tǒng)的短信數(shù)據(jù)提取與恢復方法進行了探討,分析了Android 系統(tǒng)的原理及可見短信的獲取,詳細介紹了SQLite數(shù)據(jù)庫的文件結構、數(shù)據(jù)記錄的尋址方式等。在ZTE T9手機上的實驗表明,本文的恢復方法能夠有效恢復刪除的短消息,熟悉EnScript編程的讀者可以試著編寫SQLite數(shù)據(jù)庫表內(nèi)刪除數(shù)據(jù)的恢復腳本,以期對Android手機SQLite數(shù)據(jù)庫的數(shù)據(jù)恢復提供參考。