1.4 基於備份的未root設備數據收集技術
這種操作方式優勢在於不需要面對root的風險,且可以繞過微信登錄直接獲取微信數據,操作更爲簡單;但部分廠商提供的手機自帶備份軟件並不支持該項操作或有缺陷,使用第三方應用程序有未知風險,可能導致取證數據不完全或無法取證。
以下對華爲、OPPO、VIVO、小米四款目前市面上佔有率較高的手機進行該方法取證研究。
1.4.1 華爲設備
華爲手機在2019年出貨1.42億臺,市場份額38.5%,穩坐國內智能手機市場龍頭老大之位。華爲在5G手機上的技術和市場先發優勢,都成爲了助推華爲手機在國內市場銷量持續增長的關鍵。
華爲手機目前的備份軟件9.0版本,僅支持雲備份和OTG轉接頭在外部存儲中備份。通過與廠商溝通,瞭解到目前華爲設備備份實現方法爲降級備份軟件到8.0版本,再實現取證,且需要對備份的.db文件進行二次導出(參考王喆_北京.安卓微信本地數據庫解密與刪除聊天記錄恢復完全教程[EB/OL]. http://blog.sina.com.cn/s/blog_5c5460080102ymqq.html, 2019–03–27.),參考圖3.5,具體實現步驟如下:
1)若備份軟件版本大於8.0,在“應用管理”卸載當前手機“備份”軟件;
2)安裝華爲手機助手,通過USB將手機連接到電腦,導入舊版本“備份”apk安裝文件,導出 “/sdcard/tencent/MicroMsg” 資源文件,並在手機端確認安裝;
3)打開“備份”,提示升級選擇“以後再說”,選擇備份到“內部存儲”,備份選擇“應用數據”,選擇微信,設置備份密碼選擇跳過;
4)默認備份路徑爲“內部存儲/Huawei/Backup/backupfiles/<備份日期時間命名的文件夾>”,部分型號有可能在PC端無法看到文件,此時可以在手機“文件管理”中打開相應文件夾,選擇“移動到”任何PC端可以看到的文件夾;
5)使用電腦導出備份到案件文件夾,應有三個文件,分別爲安裝包.apk,數據文件.db和配置文件.xml。
圖4華爲手機備份流程示意
通過以上步驟,導出如圖5所示三個文件,分別爲:com.tencent.mm.apk:當前微信的安裝文件;com.tencent.mm.db:微信主要數據表info.xml:配置文件。com.tencent.mm.db文件通過二次導出即爲數據庫“/data/com.tencent.mm/”目錄。
圖3.5華爲手機備份出的數據文件
使用sqlite數據庫圖形用戶界面工具打開com.tencent.mm.db文件,其中發現只有三個表,其中apk_file_info表中儲存了所有文件名和索引號,apk_file_data中則存儲了文件數據。索引號爲-1的是目錄,索引號大於0的是有用的文件。在apk_file_data中索引號相同的是同一個文件,每個文件被切成若干個8K以內的碎片進行存儲,導出時需要拼接起來再導出,如圖6。
圖6 .db文件數據結構示意
可以通過SQL語句導出文件,整個導出過程較爲漫長,其中需要注意不要關閉腳本程序和開關機,避免備份文件損壞。以https://bbs.pediy.com/thread-250714.htm帖子中out.py腳本爲例,運行一段時間後在腳本目錄“/data/data/com.tencent.mm”成功導出可用於分析的微信數據庫文件,如圖7。與步驟2中導出的“/sdcard/tencent/MicroMsg” 資源文件結合,即爲完整的微信數據文件。
import sqlite3
import os
conn = sqlite3.connect('com.tencent.mm.db')
cursor = conn.cursor()
cursor.execute("SELECT count(*) FROM apk_file_info")
all = cursor.fetchone()[0]
cursor.execute("SELECT file_path,file_index FROM apk_file_info")
result = cursor.fetchall()
count = 0
while (count < all):
if (result[count][1] > 0):
fullname = result[count][0]
findex = result[count][1]
dirname,filename = os.path.split(fullname)
fpath="." + dirname
fname="." + fullname
isExists=os.path.exists(fpath)
if not isExists:
os.makedirs(fpath)
with open(fname, "wb") as output_file:
cursor.execute("SELECT count(*) FROM apk_file_data WHERE file_index = " + str(findex))
total = cursor.fetchone()[0]
cursor.execute("SELECT file_data FROM apk_file_data WHERE file_index = " + str(findex))
acount=0
while (acount < total):
ablob = cursor.fetchone()
output_file.write(ablob[0])
acount = acount+1
count = count + 1
cursor.close()
conn.close()
圖7 二次導出的文件
1.4.2 小米/Redmi設備
2019年小米在國內市場的出貨量爲3880萬臺,市場份額爲10.5%;同時從小米獨立出來的Redmi品牌也有2000萬餘的出貨量。小米手機主打性價比,在中端機型和技術發燒友社羣中有很大的持有率。
與華爲設備類似,可以藉助廠商提供的備份APP直接本地備份微信相關文件,較爲簡單的是不需要二次數據庫導出,可以通過壓縮軟件解壓。參考圖8具體步驟如下:
1)首先進入手機的設置-更多設置-備份和重置-本地備份,輸入密碼,點擊新建備份,把兩個勾去掉,點擊軟件程序右邊的尖括號,選擇微信,點擊確定,點擊開始備份,等待完成;
圖3.8小米手機備份流程示意
2)然後將手機連接電腦,打開手機目錄下的“MIUI/backup/AllBackup/<備份日期時間命名的文件夾>/”,將.bak文件拷貝到電腦上,並導出微信資源文件夾“/sdcard/tencent/MicroMsg”,如圖9;
圖9 小米手機備份文件
3)用任意一種解壓軟件解壓com.tencent.mm.bak文件,即爲微信數據庫文件,如圖3.10。與步驟2中導出的“/sdcard/tencent/MicroMsg” 資源文件結合,即爲完整的微信數據文件。
圖10解壓手機備份文件
3.1.4.3 OPPO/realme,VIVO/iQOO設備
有“藍綠廠”之稱的OPPO與VIVO手機,2019年市場份額分別爲17.8%與17%,在國內中低端手機市場佔有率極高。且二者子品牌realme與iQOO也有很不錯的表現,2019年三季度,realme憑藉着單季度超過1020萬臺的出貨成績,首次進入全球第七名。
OPPO/realme廠商提供的手機微信備份功能存在一定缺陷,導出數據不全,只有16B左右大小的conf文件與apk文件,如圖11
圖11使用廠商備份功能導出的OPPO手機微信備份文件
VIVO廠商提供的手機備份功能依賴於雲服務功能進行備份,需要在另一臺設備登錄相同VIVO賬號進行備份與恢復操作,無法導出文件。
對於這兩個品牌及其子品牌,可以依賴第三方軟件如豌豆莢、360手機助手的導出備份方式,導出文件夾形式數據,如圖12,直接進行檢查與偵查實驗。
圖12使用360手機助手導出realme手機微信