李 威 廖 健 曾劍平
1(浙江中煙工業(yè)有限責(zé)任公司信息中心 浙江 杭州 310001) 2(復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 上海 200433)
微信作為一款免費(fèi)即時(shí)通信軟件,因其方便快捷的特性,迅速成為了人們溝通交流所普遍使用的工具。微信的崛起是一把雙刃劍,在給公眾帶來(lái)便利的同時(shí),也讓不法分子有了可乘之機(jī)。由于微信本身是一個(gè)信息傳遞平臺(tái),并且擁有數(shù)量龐大的非實(shí)名制用戶群體,在魚(yú)龍混雜的用戶環(huán)境下,利用微信進(jìn)行的犯罪活動(dòng)日益猖獗。微信犯罪已經(jīng)成為了一種新的犯罪形式,正在不斷引起社會(huì)的廣泛關(guān)注,而許多微信犯罪案件的偵破工作都需要相應(yīng)的取證分析技術(shù),所以對(duì)微信信息的分析技術(shù)的研究就有了重大意義[1]。
不法分子在作案時(shí)經(jīng)常出現(xiàn)的情況是通過(guò)微信聊天對(duì)受害者進(jìn)行誘導(dǎo)或是詐騙。通常情況下,不法分子會(huì)具備一定的反偵查能力,會(huì)下意識(shí)的減少或是掩蓋自己的犯罪證據(jù)。因此在此類(lèi)案件中經(jīng)常會(huì)發(fā)生的情況是不法分子在發(fā)送完一些證據(jù)信息之后狡猾地選擇撤回這些消息,從而干擾警方的取證工作。
由于微信應(yīng)用本身沒(méi)有提供還原撤回信息的功能,消息一經(jīng)撤回就難以還原,而目前微信取證分析技術(shù)領(lǐng)域?qū)τ谠鯓舆€原這些具有證明案件事實(shí)能力的信息也沒(méi)有系統(tǒng)的方法。因此,本文針對(duì)PC版微信軟件,進(jìn)行了內(nèi)存結(jié)構(gòu)分析,特別對(duì)文本、表情等信息撤回的特征進(jìn)行了分析,給出了一種分析方法和流程。
在計(jì)算機(jī)取證技術(shù)的研究方向中,有兩個(gè)研究方向占據(jù)了主要地位,一個(gè)是磁盤(pán)取證,一個(gè)是內(nèi)存取證[2]。其中磁盤(pán)取證是早年使用得很多的一種取證手段,但由于目前磁盤(pán)容量擴(kuò)大,磁盤(pán)加密等技術(shù)的風(fēng)行,從磁盤(pán)中提取證據(jù)在某些情況下就變得更加困難了,因此,現(xiàn)階段內(nèi)存取證也成為計(jì)算機(jī)取證技術(shù)的一種重要手段。
內(nèi)存證據(jù)分析技術(shù)也分為兩部分,其一是內(nèi)存數(shù)據(jù)獲取,研究怎樣從計(jì)算機(jī)上獲得完整的內(nèi)存數(shù)據(jù),實(shí)現(xiàn)方法主要是通過(guò)收集內(nèi)存鏡像;其二是內(nèi)存分析,研究怎樣對(duì)獲取的內(nèi)存進(jìn)行分析,從而提取相關(guān)的數(shù)據(jù)[2]。
目前主流的內(nèi)存分析方法共有4種,分別為:字符串搜索法、內(nèi)存掃描法、基于數(shù)據(jù)結(jié)構(gòu)特征法、基于操作系統(tǒng)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)法[3]。字符串搜索法是指在內(nèi)存中對(duì)已知的敏感信息進(jìn)行搜索,例如“銀行賬戶”、“密碼”等詞匯,鎖定內(nèi)存中的證據(jù)內(nèi)容。但是,基于字符串搜索的方法所得到的結(jié)果準(zhǔn)確度得不到保證,因?yàn)闆](méi)有其他搜索條件的輔助存在,只要包括搜索內(nèi)容的字段都會(huì)作為結(jié)果返回,導(dǎo)致的問(wèn)題就是搜索結(jié)果過(guò)于粗糙?;跀?shù)據(jù)結(jié)構(gòu)特征法是指通過(guò)數(shù)據(jù)結(jié)構(gòu)或者已知字段的一些特征,對(duì)內(nèi)存進(jìn)行掃描。由于在這種方法中會(huì)使用一系列的語(yǔ)言對(duì)特征進(jìn)行精確描述,所以分析結(jié)果準(zhǔn)確性較高,但相應(yīng)的問(wèn)題是,這種方法依賴于特征的存在,所以應(yīng)用范圍較為狹窄。基于操作系統(tǒng)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)法是指一種通過(guò)分析操作系統(tǒng)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)來(lái)幫助取證的方法,由于操作系統(tǒng)中包含有很多關(guān)鍵數(shù)據(jù)結(jié)構(gòu),所以基于關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行分析的方法就有很多種,通常對(duì)取證工作幫助最大的進(jìn)程結(jié)構(gòu)是EPROCESS[7-8]。
微信作為一種使用范圍非常廣泛的綜合性工具,系統(tǒng)中的許多數(shù)據(jù)成為取證的重點(diǎn),因此微信取證技術(shù)得到了越來(lái)越多的研究。
吳熙曦等[4]在基于KNN的Android智能手機(jī)微信取證方法中,提出了一種在大量微信聊天記錄中快速鎖定與案件有關(guān)內(nèi)容的方法。他們利用同義詞林計(jì)算微信聊天信息中的詞語(yǔ)相似度,從中篩選最佳特征詞,再通過(guò)向量表示會(huì)話,利用KNN算法對(duì)會(huì)話進(jìn)行分類(lèi),從而實(shí)現(xiàn)較快速地從大量聊天會(huì)話內(nèi)容中找到與案件相關(guān)的內(nèi)容,提高微信取證的效率。湯帥等[5]提出了一種基于iOS平臺(tái)進(jìn)行微信取證的方法,利用iTunes對(duì)iPhone/iPad的備份文件進(jìn)行提取,在備份文件中,可以還原出微信程序的信息文件,從而進(jìn)行微信取證工作。馬夢(mèng)筆[6]在2015年對(duì)iOS平臺(tái)下微信刪除恢復(fù)的原理進(jìn)行了研究及技術(shù)試驗(yàn),針對(duì)基于iOS系統(tǒng)的取證研究工作,文中給出了恢復(fù)微信刪除信息的若干種途徑,所采用的方法與湯帥等的想法略同,也是通過(guò)取得iPad的備份文件,并通過(guò)越獄手段獲得對(duì)備份文件的讀寫(xiě)權(quán)限展開(kāi)。王偉兵等[9]針對(duì)Android系統(tǒng)手機(jī),對(duì)加密和解密進(jìn)行了研究,提出了一系列新的取證方法,對(duì)存儲(chǔ)在本地的加密信息提取微信中的通話記錄和其他相關(guān)信息。姜華巖[10]對(duì)Android系統(tǒng)中SQLite數(shù)據(jù)進(jìn)行了提取, 對(duì)百度地圖、滴滴打車(chē)和攜程三個(gè)應(yīng)用程序的數(shù)據(jù)提取進(jìn)行實(shí)驗(yàn),發(fā)現(xiàn)最終得出的結(jié)果可以很好地提供嫌疑人的活動(dòng)信息,為警方偵破案件提供很大便利。常亞翠[11]對(duì)Android中的SQLite數(shù)據(jù)庫(kù)進(jìn)行了解密分析,提出了一種Android手機(jī)遠(yuǎn)程數(shù)據(jù)提取的方法,實(shí)現(xiàn)Android手機(jī)未root時(shí)和root后兩種情況下的數(shù)據(jù)獲取。陳廷明[12]設(shè)計(jì)了一種Android系統(tǒng)存儲(chǔ)數(shù)據(jù)取證系統(tǒng),實(shí)現(xiàn)了數(shù)據(jù)提取、案件管理、數(shù)據(jù)查看、系統(tǒng)分析及報(bào)告,通過(guò)Android系統(tǒng)的API接口進(jìn)行數(shù)據(jù)提取、刪除數(shù)據(jù)恢復(fù)和提取。
從以上可以看出,目前微信取證技術(shù)研究的方向中,基于Android和iOS系統(tǒng)展開(kāi)的研究占了主流。但PC版微信的取證技術(shù)研究工作有所缺失,成為了短板。此外,目前微信取證以數(shù)據(jù)文件為主要對(duì)象,研究從數(shù)據(jù)文件中提取數(shù)據(jù)、破解數(shù)據(jù)的方法,但是在實(shí)際取證中有大量的數(shù)據(jù)存在于內(nèi)存中。在微信交流中,除了用戶刪除數(shù)據(jù)之外,還有撤回?cái)?shù)據(jù)的情況,對(duì)撤回?cái)?shù)據(jù)與刪除數(shù)據(jù)的處理在取證工作中的并不相同。綜上,本文的研究主題確定為采用內(nèi)存取證技術(shù)對(duì)PC版微信撤回消息的分析技術(shù)研究。
本文以對(duì)Windows 7操作系統(tǒng)下的微信for Windows 1.1.0.41版本研究為例,主要的研究目的是通過(guò)分析微信內(nèi)存文件,找到能夠定位撤回消息的方法。所提出的方法可以適合于其他版本的微信應(yīng)用。
在微信中,如果一條信息被發(fā)送出的時(shí)間不超過(guò)2分鐘,那么這條信息可以由該信息的發(fā)送方通過(guò)“撤回”操作進(jìn)行撤回,而經(jīng)過(guò)“撤回”操作之后,這條信息將消失于所有參與該聊天的用戶的聊天界面上,并且無(wú)法通過(guò)微信所提供的功能重新恢復(fù)。本文的主要研究?jī)?nèi)容就是找出定位這條消息的方法,為今后進(jìn)行各類(lèi)撤回消息的復(fù)原提供一些技術(shù)基礎(chǔ)。
微信發(fā)送的消息包括多種類(lèi)型,例如:中文、英文、數(shù)字、表情、圖片、語(yǔ)音、視頻等;因?yàn)槟壳拔⑿舊or Windows版本不支持發(fā)送語(yǔ)音消息,所以語(yǔ)音類(lèi)型的消息在本文中就不作考慮了,因此本文主要分析的對(duì)象是前3類(lèi),即中文文本、英文文本和表情。
操作系統(tǒng)為Windows 7旗艦版操作系統(tǒng),微信軟件為for Windows 1.1.0.41版本。
在內(nèi)存數(shù)據(jù)獲取方面,采用的工具是pmdump進(jìn)程內(nèi)存文件轉(zhuǎn)儲(chǔ)工具;同時(shí)需要簡(jiǎn)單的字符串搜索匹配工具,要求支持十六進(jìn)制數(shù)據(jù)的搜索,因此選擇常用的UltraEdit32編輯器。
在PC版微信的默認(rèn)安裝中,可以發(fā)現(xiàn)微信內(nèi)容存儲(chǔ)信息位于C:UsersAdministratorAppDataRoamingTencentWeChat,Administrator是安裝的用戶名。這個(gè)路徑下包括一些系統(tǒng)文件,打開(kāi)之后我們發(fā)現(xiàn)里面存儲(chǔ)了這個(gè)微信號(hào)最近接收到的部分文件和圖片。該文件夾中還有一個(gè)最主要文件是MMdata數(shù)據(jù)庫(kù),存儲(chǔ)用戶登錄記錄等數(shù)據(jù)。但是由于數(shù)據(jù)存儲(chǔ)和內(nèi)存尚存在一定的同步點(diǎn),因此這里我們主要考慮直接獲取內(nèi)存的方式。所使用的工具就是pmdump,它是一個(gè)命令行工具,能夠在不結(jié)束程序運(yùn)行的情況下轉(zhuǎn)儲(chǔ)(Dump)一個(gè)進(jìn)程的內(nèi)存內(nèi)容。如圖1所示,pmdump工具有兩種功能,其一是在命令行中調(diào)用了pmdump工具之后,寫(xiě)入一個(gè)PID號(hào)(進(jìn)程控制符)和一個(gè)文件名,pmdump將會(huì)把與輸入的PID號(hào)對(duì)應(yīng)進(jìn)程的內(nèi)存文件轉(zhuǎn)儲(chǔ)到與所輸入的文件名對(duì)應(yīng)的文件當(dāng)中;其二是在調(diào)用pmdump之后寫(xiě)入“-list”,這個(gè)功能的作用是可以查看計(jì)算機(jī)中運(yùn)行的所有進(jìn)程以及它們對(duì)應(yīng)的PID號(hào)。
圖1 pmdump工具的使用方法
基于這個(gè)工具,通過(guò)-list參數(shù)獲取微信進(jìn)程的PID,進(jìn)而通過(guò)pmdump pid可以將正在運(yùn)行的微信進(jìn)程內(nèi)存信息轉(zhuǎn)儲(chǔ)到一個(gè)后綴名為.dmp的文件中。這個(gè)文件中包含了微信應(yīng)用當(dāng)前的內(nèi)存數(shù)據(jù),我們接下來(lái)的研究?jī)?nèi)容將全部圍繞著這類(lèi)文件進(jìn)行展開(kāi)。
Pmdump工具轉(zhuǎn)儲(chǔ)出的內(nèi)存文件是分析的基礎(chǔ),它是一個(gè)十六進(jìn)制文件,需要用十六進(jìn)制文件編輯器打開(kāi)。本文采用UltraEdit十六進(jìn)制編輯器進(jìn)行觀察和分析。接下來(lái)要進(jìn)行的工作就是探究微信消息在內(nèi)存文件中的位置和表現(xiàn)形式。
為了探究微信中各種消息類(lèi)型分別都是怎樣映射到微信內(nèi)存文件中的,在接下來(lái)的過(guò)程中,我們將針對(duì)不同的消息類(lèi)型分別進(jìn)行實(shí)驗(yàn)來(lái)探究。研究?jī)?nèi)容包括:查看微信消息在內(nèi)存文件中都是以怎樣的形式進(jìn)行保存的,是否微信聊天中撤回的消息也存在于內(nèi)存文件當(dāng)中,以及各種類(lèi)型的撤回消息在內(nèi)存文件中的格式是否都相同。在這里需要額外做出說(shuō)明的是,由于微信不同版本之間內(nèi)存文件的內(nèi)容和格式可能差異較大,所以以下實(shí)驗(yàn)中的得出的關(guān)于內(nèi)存文件的結(jié)論,目前只成立于微信for windows 1.1.0.41版本中,由于其他版本未經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,但是基本的分析方法是一樣的。下面以中文、英文和表情信息為例進(jìn)行介紹。
(1) 中文消息 在分析前進(jìn)行測(cè)試對(duì)話,我們一共向微信測(cè)試賬號(hào)發(fā)送了5條微信信息,并且撤回了其中的第4條,所撤回信息的文本內(nèi)容為:“撤銷(xiāo)”。如圖2所示。
圖2 中文文本對(duì)話內(nèi)容
經(jīng)過(guò)內(nèi)存文件分析可以發(fā)現(xiàn),所有的中文文本信息在內(nèi)存文件中的保存內(nèi)容都是經(jīng)過(guò)了URL編碼轉(zhuǎn)換之后所得的形式。例如:
“微信取證”經(jīng)過(guò)編碼轉(zhuǎn)換后為:“%e5%be%ae%e4%bf%a1%e5%8f%96%e8%af%81”;
“技術(shù)研究”經(jīng)過(guò)編碼轉(zhuǎn)換后為:“%e6%8a%80%e6%9c%af%e7%a0%94%e7%a9%b6”;
“撤銷(xiāo)”經(jīng)過(guò)編碼轉(zhuǎn)換后為:“%e6%92%a4%e9%94%80”;
“完畢”經(jīng)過(guò)編碼轉(zhuǎn)換后為:“%e5%ae%8c%e6%af%95”;
相應(yīng)的內(nèi)容可以利用UltraEdit的搜索操作比較快捷地從內(nèi)存文件中找到,例如“微信取證”的信息如圖3所示。其他的不再列出。
圖3 編碼轉(zhuǎn)換后的“微信取證”
(2) 英文消息 按照類(lèi)似的方法可以對(duì)英文消息進(jìn)行測(cè)試分析。可以發(fā)現(xiàn)英文字符經(jīng)過(guò)URL編碼轉(zhuǎn)換得到的結(jié)果就是它本身,所以在內(nèi)存文件中查找英文類(lèi)型的微信消息時(shí),不需要像中文一樣先將消息文本經(jīng)過(guò)編碼轉(zhuǎn)換。但是由于微信內(nèi)存文件本身是十六進(jìn)制的文件格式,所以不能直接在16進(jìn)制區(qū)域查找英文字母,在這個(gè)問(wèn)題上,UltraEdit編輯器中提供了比較方便的解決方法,如圖4所示。
圖4 通過(guò)勾選“查找ASCII”進(jìn)行ASCII碼區(qū)域的搜索
對(duì)于本文的實(shí)驗(yàn)來(lái)說(shuō),可以得到如圖5所示的查找結(jié)果,可以看到test1按照ASCII進(jìn)行了編碼。
圖5 編碼轉(zhuǎn)換后的“test1”
(3) 表情消息 對(duì)于表情符而言,第一個(gè)需要解決的問(wèn)題就是它是采用什么方式進(jìn)行編碼的。為此,可以按照同樣的方法,利用測(cè)試賬號(hào)發(fā)送微信信息,并讓表情消息在在兩個(gè)英文消息之間,這樣便于后續(xù)進(jìn)行定位分析。撤回其中的微信表情:[微笑]。
經(jīng)過(guò)分析發(fā)現(xiàn),如圖6所示,我們?cè)趦?nèi)存文件中找到了“test over”和“test biaoqing”這兩條消息,而這兩條消息中間夾著一條經(jīng)過(guò)了編碼轉(zhuǎn)化的消息,由于它被夾在兩條消息之間,按照位置分析,這條消息應(yīng)該是我們所發(fā)送的表情信息,為了求證這個(gè)想法是否正確,可以將中間那條消息進(jìn)行URL解碼,即“%5B%E5%BE%AE%E7%AC%91%5D”經(jīng)過(guò)解碼之后的結(jié)果是[微笑]。
圖6 在ASCII區(qū)域搜索test over,并定位表情消息
這說(shuō)明在該版本的微信中,對(duì)自己本身資源內(nèi)部的表情定義形式為文本“[表情名字]”形式。得出這個(gè)結(jié)論之后,針對(duì)表情類(lèi)型的微信消息的還原技術(shù)就能夠歸并到文本類(lèi)型的微信消息識(shí)別技術(shù)當(dāng)中去了,由于其不存在特殊性,所以能夠以同一種方式進(jìn)行判斷。
經(jīng)過(guò)對(duì)內(nèi)存轉(zhuǎn)儲(chǔ)文件的分析,我們能夠得出兩個(gè)結(jié)論:一是消息內(nèi)容在內(nèi)存文件中的保存格式為經(jīng)過(guò)URL編碼轉(zhuǎn)換之后得到的十六進(jìn)制形式,中文文本在進(jìn)行查找之前需要先進(jìn)行編碼轉(zhuǎn)換;二是撤回消息在內(nèi)存文件中依然保存了完整的內(nèi)容信息,這就為我們接下來(lái)從內(nèi)存文件中定位微信撤回消息的研究提供了可能性。其中最主要的問(wèn)題是要如何尋找撤回消息的標(biāo)志。
在使用微信的過(guò)程中,當(dāng)我們發(fā)送了一條或者一條以上的語(yǔ)句后,選擇一條消息撤回時(shí),聊天界面上會(huì)在撤回的語(yǔ)句下面顯示一個(gè)提示語(yǔ)句:“你撤回了一條消息”(如圖1所示),于是我們可以假設(shè)微信的內(nèi)存文件中應(yīng)該同樣也存在這條提示信息。于是,以上一節(jié)微信撤回消息內(nèi)容是中文文本中得到的實(shí)驗(yàn)結(jié)果為例,我們進(jìn)行了實(shí)驗(yàn)求證。
“你撤回了一條消息”經(jīng)過(guò)URL編碼轉(zhuǎn)換后為:
%e4%bd%a0%e6%92%a4%e5%9b%9e%e4%ba%86%e4%b8%80%e6%9d%a1%e6%b6%88%e6%81%af
在內(nèi)存文件中進(jìn)行搜索該編碼串,發(fā)現(xiàn)該語(yǔ)句確實(shí)存在于內(nèi)存文件內(nèi)(如圖7所示),并且通過(guò)觀察可以發(fā)現(xiàn),內(nèi)存文件中通過(guò)在內(nèi)容前后添加
圖7 微信內(nèi)存文件中找到的提示字段
進(jìn)一步實(shí)驗(yàn)和數(shù)據(jù)分析表明,在微信內(nèi)存文件中,我們可以通過(guò)
(1) 首先在微信內(nèi)存文件中搜索“33 6B 6C 58”,它是整個(gè)
(2) 之后提取“33 6B 6C 58”字段之后8個(gè)字節(jié)的內(nèi)容作為匹配字段,如圖8所示。這8個(gè)字節(jié)的內(nèi)容稱為匹配字段,所有的撤回消息和對(duì)應(yīng)的
圖8
(3) 接著再次向下做一次匹配字段的搜索,目的是要找到撤回消息字段的位置。此時(shí),可能存在兩種情況,第一種是直接匹配到了撤回消息字段,這意味著我們找到了撤回消息字段的位置,進(jìn)入下一個(gè)步驟。另外一種情況是,在微信內(nèi)存文件中存在不止一個(gè)
(4) 找到撤回消息字段的匹配字段之后,從匹配字段結(jié)束之后的第25個(gè)字節(jié)開(kāi)始提取,直到遇到結(jié)束符“0A 04 08 01”結(jié)束,提取出來(lái)的字段便是撤回消息文本段經(jīng)過(guò)URL編碼轉(zhuǎn)換之后的形式。
最后,在多次不同的微信內(nèi)存轉(zhuǎn)儲(chǔ)文件分析中,發(fā)現(xiàn)該方法能夠正確地找出用戶撤回的中文、英文和表情消息。
本文從微信取證技術(shù)的研究背景出發(fā),介紹了微信內(nèi)存文件的獲取,內(nèi)存分析,微信消息在內(nèi)存文件中的內(nèi)容與格式等內(nèi)容。通過(guò)實(shí)驗(yàn)驗(yàn)證了該方法的可操作性和有效性。
本文研究結(jié)果也還存在不足。沒(méi)有實(shí)現(xiàn)對(duì)所有的微信消息類(lèi)型都能進(jìn)行識(shí)別,對(duì)內(nèi)存的分析也可以繼續(xù)深入優(yōu)化,將本文所設(shè)計(jì)的分析方法優(yōu)化成為對(duì)眾多微信版本都普適的判斷方法也是今后值得進(jìn)一步研究的。