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