王德廣, 倪懷乾
(大連交通大學(xué) 軟件學(xué)院, 遼寧 大連 116028)
智能手機(jī)已不止于通訊,而具備了一臺(tái)電腦的重要功能。與此同時(shí),不少犯罪分子也利用智能手機(jī)進(jìn)行犯罪活動(dòng)。為了打擊此類犯罪行為,手機(jī)取證技術(shù)就至關(guān)重要。本文采取了一種適用于不同機(jī)型的安卓系統(tǒng)獲取root的方法,并且利用python開發(fā)了windows桌面應(yīng)用程序用于可視化提取的數(shù)據(jù)。結(jié)合數(shù)據(jù)挖掘技術(shù)將數(shù)據(jù)進(jìn)行分析,繪制出網(wǎng)絡(luò)拓?fù)鋱D等。為取證人員提供了更為直觀的判斷,節(jié)省了數(shù)據(jù)的篩選時(shí)間,提高了效率。
Android的系統(tǒng)架構(gòu)[1]大致分為四層,從低到高依次為Linux內(nèi)核層、系統(tǒng)運(yùn)行庫層、應(yīng)用程序框架層和應(yīng)用程序?qū)印?/p>
主要分區(qū)如下。
(1) modem分區(qū):實(shí)現(xiàn)手機(jī)必需的通信功能。
(2) bootloader分區(qū):bootloader的primarybootloader部分,主要執(zhí)行硬件檢測;secondarystagebootloader會(huì)進(jìn)行一些硬件初始化工作;fastboot是Android定義的一種簡單的刷機(jī)協(xié)議,用戶可以通過fastboot命令行工具來進(jìn)行刷機(jī)。
(3) boot分區(qū):分為頭部、Linux內(nèi)核和ramdisk。
(4) recovery分區(qū):是Android定義的一個(gè)標(biāo)準(zhǔn)刷機(jī)協(xié)議。
Android中使用了多個(gè)文件系統(tǒng),用于啟動(dòng)和運(yùn)行系統(tǒng)。通過查看文件/proc/filesystems的內(nèi)容來確定Android所支持的文件系統(tǒng)有哪些。例如在所參考的錘子堅(jiān)果3上,包含的內(nèi)容有:sysfs、rootfs、tmpfs、bdev、proc、cgroup、cpuset、debugfs、sockfs、pipefs、ramfs、configfs、ext2、ext3、ext4、msdos、sdcardfs、fuse、selinuxfs、functionfs、exfat、devpts等。
將root級別的幾個(gè)重要目錄(代表性顯示)。
(1) cache:lost+found、recovery
(2) data:anr、app、app-private、backup、dalvik-cache、local、lost+found、property、tombstones
data/data/com.facebook.katana:cache、databases、files、lib、shared_prefs
data/misc:bluetooth、dhcp、keystore、systemkeys、vpn、wifi
data/system:sync、usagestats
(3) mnt/sdcard:DCIM、download、Downloads、LOST.DIR、temp
mnt/sdcard/android/data/com.google.android.apps.maps:cache、debug、testdata
(4) system:app、bin、fonts、framework、lost+found、tts、xbin
system/etc:bluetooth、firmware、permissions、PPP、security、wifi
system/lib:egl、hw、modules
system/media/audio:alarms、notifications、ringtones、ui
system/usr:keychars、keylayout、share
(1) SQLite
SQLite數(shù)據(jù)庫屬于輕量級的,而且具有跨平臺(tái)的特性,使得SQLite數(shù)據(jù)庫應(yīng)用于移動(dòng)設(shè)備的系統(tǒng)中。SQLite數(shù)據(jù)庫文件存儲(chǔ)在/data/data/應(yīng)用程序包/databases文件夾下,是取證最為重要的數(shù)據(jù)路徑。
(2) 內(nèi)部存儲(chǔ)
Android系統(tǒng)的內(nèi)部存儲(chǔ)是通過IO流進(jìn)行文件的讀取。內(nèi)部存儲(chǔ)文件除了能被root用戶讀取外,就僅能被對應(yīng)的應(yīng)用程序讀取。
(3) 外部存儲(chǔ)
Android系統(tǒng)的外部存儲(chǔ)為SD卡,外部存儲(chǔ)可以存儲(chǔ)較大的文件,取證數(shù)據(jù)多為語音、圖片和視頻等。
Step1:獲取root權(quán)限;
Step2:開啟開發(fā)者模式;
Step3:電腦端配置好adb調(diào)試模式,通過adb service命令,驗(yàn)證手機(jī)與電腦連接正常,使用adb shell進(jìn)入到手機(jī),輸入su進(jìn)入root用戶。
屏幕鎖[2]的設(shè)定在設(shè)置安全中,可用的屏幕鎖定方式包括:無、滑動(dòng)、人臉解鎖、圖案、密碼與指紋。
(1) 九宮圖形鎖(圖案):從左上角的00至右下角的08進(jìn)行編號,根據(jù)算法計(jì)算后編碼為密文,將密碼存儲(chǔ)在/data/system/gesture.key文件中??赏ㄟ^“adb pull /data/system/gesture.key”將加密文件提取。獲取到gesture.key后再利用密碼字典暴力破解獲得明文密碼。
(2) PIN鎖:該密文存儲(chǔ)在/data/system/password.key文件中,獲取到password.key后利用密碼字典暴力破解獲得明文密碼。
(3) 高級用戶鎖:通過哈希或MD5值對其自動(dòng)加密,將密碼存儲(chǔ)在/data/data/com.android.providers.settings/databases.db,將salt值取出,使用密碼字典進(jìn)行暴力破解。
(4) recovery模式密碼暴力破解:若嫌疑人使用的Android手機(jī)USB調(diào)試沒有打開,啟用了開機(jī)屏幕鎖,就無法進(jìn)入設(shè)置應(yīng)用程序中勾選啟用USB調(diào)試功選項(xiàng),也就意味著無法進(jìn)行后續(xù)的取證工作。此時(shí)需要利用recovery模式[3]來進(jìn)行密碼破解。
Step1:手機(jī)關(guān)機(jī)后重啟進(jìn)入recovery模式,bankup&restore備份得到新鏡像文件。
Step2:打開鏡像文件中/data/data/com.android.providers.settings/databases中的settings.db文件。
Step3:從settings.db文件導(dǎo)出hash值。
Step4:獲取屏幕鎖密碼文件。
Step5:利用密碼字典暴力破解獲取密碼。
(1) 手機(jī)一鍵root
目前安卓應(yīng)用市場具有較多的一鍵root應(yīng)用,例如百度一鍵root、超級root大師等應(yīng)用。
(2) 電腦端root
在電腦端也有較多對手機(jī)root獲取的軟件,例如刷機(jī)大師、kingroot、一鍵root大師等。
(3) 手工獲取root
手工獲取root權(quán)限為目前成功率最高一種方式,又稱線刷或卡刷,適用于較新的系統(tǒng)和機(jī)型。
以本文機(jī)型錘子堅(jiān)果3為例,利用9008工程線進(jìn)行刷機(jī)。操作如下:下載QPST、TWRP和root包;將root包復(fù)制到手機(jī)根目錄;打開Qfil并Build線刷包里的文件;點(diǎn)擊Load XML選擇工具包中文件;將工程線(EDL)插到電腦上;按住工程線的按鈕將另一端插入手機(jī)、點(diǎn)擊Download等待線刷完成;進(jìn)入TWRP后,進(jìn)Install(安裝),刷入root包(根目錄),重啟后獲取root。
限于篇幅,提供部分?jǐn)?shù)據(jù)庫具體路徑。
(1) 通話記錄數(shù)據(jù)庫存儲(chǔ)位置:
/data/data/com.android.providers.contacts/databases/calllog.db.
(2) 短信數(shù)據(jù)庫存儲(chǔ)位置:
/data/data/com.android.mms/databases/smssdk.db.
(3) 微信數(shù)據(jù)庫存儲(chǔ)位置:
/data/data/com.tencent.mm/MicroMsg/8266e537b59d10d389937efe3d2c30e8(不同賬號該碼不同)/EnMicroMsg.db.
微信數(shù)據(jù)庫[4]進(jìn)行了加密。首先獲取當(dāng)前登錄微信的手機(jī)IMEI碼,再者需要獲取微信uin信息,微信uin與微信賬戶進(jìn)行關(guān)聯(lián),是唯一標(biāo)識(shí)微信用戶身份的標(biāo)識(shí)符。在
/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml中即可獲取uin值。將IMEI和微信uin合并,再進(jìn)行MD5解密,并取計(jì)算結(jié)果的前7位(小寫)即為數(shù)據(jù)庫解密密碼。
(4) QQ數(shù)據(jù)庫存儲(chǔ)位置:
/data/data/com.tencent.mobileqq/databases/賬號.db
QQ使用的是表加密。解密方法:聊天記錄內(nèi)容明文(D);聊天記錄內(nèi)容密文(E);手機(jī)IMEI;公式:E=D^IMEI。(^:按位異或算法)。
(5) Facebook數(shù)據(jù)庫存儲(chǔ)位置:
/data/data/com.facebook.katana/databases/contacts_db2.
(6) 淘寶瀏覽記錄:
/data/data/com.taobao.taobao/databases/data_history
(7) QQ瀏覽器瀏覽記錄存儲(chǔ)位置:
/data/data/com.tencent.mtt/databases/database
(8) 百度瀏覽器瀏覽記錄存儲(chǔ)位置:
/data/data/com.baidu.browser.apps/databases/dbbrowser.db
(9) 百度地圖:
/data/data/com.baidu.BaiduMap/files /poi_his.sdb文件中存儲(chǔ)有搜索記錄信息。
(10) 搜狗地圖:
com.sogou.map.mobile.android.history_result.db存儲(chǔ)搜索記錄。
數(shù)據(jù)提取過程:進(jìn)入手機(jī)命令行并進(jìn)入root用戶,(例如)“cd/data/data/com.android.providers.contacts/databases”,輸入“l(fā)s”查看提取該數(shù)據(jù)庫的名稱?!癱p calllog.db /mnt/sdcard/”將該數(shù)據(jù)庫提取到sdcard上,此時(shí)再打開一個(gè)新的命令行,“adb pull sdcard/calllog.db”,即可成功將數(shù)據(jù)庫提取到當(dāng)前命令行所在的目錄下。
實(shí)驗(yàn)環(huán)境。
筆記本電腦:神舟戰(zhàn)神 i7 內(nèi)存8G 顯存4G 1T+128SSD Window10 64位。
開發(fā)工具:PyCharm專業(yè)版 (PyQt QtDesigner PyUic)、adb、SQLite。
通訊、微信、QQ、社交軟件、瀏覽器、地圖導(dǎo)航、淘寶、手機(jī)系統(tǒng)信息等數(shù)據(jù)的提取主界面,如圖1所示。
圖1 數(shù)據(jù)提取主界面
主界面用QMainWindow、QtGui、QtCore、QtWidgets、QApplication、sys等庫,主要為頁面的設(shè)計(jì)和頁面的跳轉(zhuǎn),由每個(gè)按鈕通過信號和槽連接到相應(yīng)的子頁面,以其中一個(gè)子頁面為例,如圖2所示。
圖2為QDialog頁面,其它庫與主頁面相同,不同于使用QComboBox來設(shè)計(jì)下拉選擇列表,列表內(nèi)容為4.2功能架構(gòu)下分支的內(nèi)容。點(diǎn)擊“查詢”按鈕跳轉(zhuǎn)到所選項(xiàng)目的查詢顯示,如圖3所示。
圖2 數(shù)據(jù)提取其中一個(gè)子頁面
圖3 核心內(nèi)容頁面
該類頁面使用QDialog,為最核心內(nèi)容頁面,查詢顯示數(shù)據(jù)庫內(nèi)容。實(shí)現(xiàn)了從輸出到控制臺(tái)的內(nèi)容截取到該界面文本框內(nèi)顯示。將其以設(shè)定好的格式顯示,通過關(guān)鍵字搜索到所需信息。
(1) 各類瀏覽器獲取的歷史搜索記錄及網(wǎng)頁存儲(chǔ)的表單賬號與密碼。
(2) 提取微信存儲(chǔ)的聊天記錄、圖片、語音及好友親密度數(shù)據(jù)等。
(3) 獲取通訊好友、短信、通話記錄和繪制通話記錄的時(shí)間序列圖。
(4) 提取各類導(dǎo)航軟件存儲(chǔ)的導(dǎo)航和搜索數(shù)據(jù)。
(5) 查看QQ好友賬號信息與聊天記錄。
(6) 手機(jī)系統(tǒng)信息提取的數(shù)據(jù)無需獲取root,連接電腦后即可查看。其中,WiFi查看嫌疑人連接過的WiFi用戶名及密碼;網(wǎng)絡(luò)IP查詢連接的網(wǎng)絡(luò),包括2/3/4/5G網(wǎng)絡(luò)連接的地址、使用VPN代理的信息、WiFi連接的IP等;系統(tǒng)信息是查詢手機(jī)版本、系統(tǒng)版本;提取手機(jī)鏡像是在本地存儲(chǔ)一份當(dāng)前手機(jī)的所有數(shù)據(jù)并備份;日志是查詢當(dāng)前手機(jī)的各類日志信息。
(7) 查看淘寶的聊天記錄和瀏覽記錄。
(8) 各類社交軟件的聊天記錄與好友信息。
該方式無需root,使用itchat庫登陸網(wǎng)頁版微信,掃描二維碼后便在本地生成用戶信息文件和用戶名.html。其中,用戶信息文件包含所有微信好友的微信id、昵稱、地區(qū)和個(gè)性簽名;用戶名.html文件是通過collections的Counter和pyecharts的Bar庫來生成并統(tǒng)計(jì)好友所在地區(qū)信息、數(shù)量與男女比例等。
基于時(shí)間序列的可視化方法是將時(shí)間作為主要變量,通過時(shí)間序列圖構(gòu)建時(shí)間線。以通信時(shí)間作為X軸,通信對象作為Y軸,坐標(biāo)原點(diǎn)為本機(jī)賬號(嫌疑人),建立時(shí)間序列圖,如圖4所示。
圖4 時(shí)間序列示意圖
用線段將嫌疑人和用戶進(jìn)行連接,表示在某時(shí)間點(diǎn)與用戶進(jìn)行了通信。直觀展現(xiàn)了嫌疑人與各個(gè)用戶賬號通信行為頻率,便于取證人員結(jié)合案件發(fā)生的時(shí)間,鎖定特定時(shí)間段內(nèi)與嫌疑人進(jìn)行通信的用戶,縮小取證范圍,提高取證效率。該方法用numpy、matplotlib.pyplot等庫,通過調(diào)用plot函數(shù)繪制f(xi,yj),以坐標(biāo)軸形式顯示(截取部分信息)。
通過社交關(guān)系網(wǎng)絡(luò)拓?fù)鋱D,可清晰確定用戶的社交關(guān)系親密度,如圖5所示。
圖5 社交關(guān)系親密度
在社交網(wǎng)絡(luò)拓?fù)鋱D中,若兩個(gè)節(jié)點(diǎn)之間的權(quán)值越大,則表示這兩個(gè)節(jié)點(diǎn)之間越熟悉,所代表的兩個(gè)用戶之間的關(guān)系越親密,兩者之間的影響力也就越大,反之相反。因此本文采用權(quán)值的計(jì)算方式來精確計(jì)算犯罪嫌疑人與其好友之間的關(guān)系,準(zhǔn)確還原出犯罪嫌疑人近期的社交關(guān)系網(wǎng)絡(luò)。
通過生成詞云的方式,快速分析嫌疑人網(wǎng)購商品的類別。在生成的詞云中,字體越大代表搜索的頻率越高,說明嫌疑人購買該商品的可能性越大。以此來判斷嫌疑人最近的購買活動(dòng),從而評估相應(yīng)的行為動(dòng)機(jī),如圖6所示。
圖6
可判斷該用戶購買多為生活用品。該方法使用停用詞表進(jìn)行數(shù)據(jù)清洗,并使用jieba庫分詞,wordcloud與matplotlib生成詞云。
本文通過對安卓系統(tǒng)的解鎖與root的獲取研究,成功提取出手機(jī)內(nèi)部重要的數(shù)據(jù)庫。在提取數(shù)據(jù)階段,使用python開發(fā)的應(yīng)用程序加以可視化,更為直觀明了。在數(shù)據(jù)分析階段,使用社交網(wǎng)絡(luò)等方式將嫌疑人的重要信息以圖形化的方式呈現(xiàn)給取證人員,提供了更多的分析依據(jù),從而進(jìn)一步實(shí)現(xiàn)功能的擴(kuò)充,提供更為完善的程序。