APP下载

面向取证应用的PC版微信的内存分析方法

2019-04-01曾剑平

计算机应用与软件 2019年2期
关键词:字段内存编码

李 威 廖 健 曾剑平

1(浙江中烟工业有限责任公司信息中心 浙江 杭州 310001) 2(复旦大学计算机科学技术学院 上海 200433)

0 引 言

微信作为一款免费即时通信软件,因其方便快捷的特性,迅速成为了人们沟通交流所普遍使用的工具。微信的崛起是一把双刃剑,在给公众带来便利的同时,也让不法分子有了可乘之机。由于微信本身是一个信息传递平台,并且拥有数量庞大的非实名制用户群体,在鱼龙混杂的用户环境下,利用微信进行的犯罪活动日益猖獗。微信犯罪已经成为了一种新的犯罪形式,正在不断引起社会的广泛关注,而许多微信犯罪案件的侦破工作都需要相应的取证分析技术,所以对微信信息的分析技术的研究就有了重大意义[1]。

不法分子在作案时经常出现的情况是通过微信聊天对受害者进行诱导或是诈骗。通常情况下,不法分子会具备一定的反侦查能力,会下意识的减少或是掩盖自己的犯罪证据。因此在此类案件中经常会发生的情况是不法分子在发送完一些证据信息之后狡猾地选择撤回这些消息,从而干扰警方的取证工作。

由于微信应用本身没有提供还原撤回信息的功能,消息一经撤回就难以还原,而目前微信取证分析技术领域对于怎样还原这些具有证明案件事实能力的信息也没有系统的方法。因此,本文针对PC版微信软件,进行了内存结构分析,特别对文本、表情等信息撤回的特征进行了分析,给出了一种分析方法和流程。

1 研究现状

在计算机取证技术的研究方向中,有两个研究方向占据了主要地位,一个是磁盘取证,一个是内存取证[2]。其中磁盘取证是早年使用得很多的一种取证手段,但由于目前磁盘容量扩大,磁盘加密等技术的风行,从磁盘中提取证据在某些情况下就变得更加困难了,因此,现阶段内存取证也成为计算机取证技术的一种重要手段。

内存证据分析技术也分为两部分,其一是内存数据获取,研究怎样从计算机上获得完整的内存数据,实现方法主要是通过收集内存镜像;其二是内存分析,研究怎样对获取的内存进行分析,从而提取相关的数据[2]。

目前主流的内存分析方法共有4种,分别为:字符串搜索法、内存扫描法、基于数据结构特征法、基于操作系统关键数据结构法[3]。字符串搜索法是指在内存中对已知的敏感信息进行搜索,例如“银行账户”、“密码”等词汇,锁定内存中的证据内容。但是,基于字符串搜索的方法所得到的结果准确度得不到保证,因为没有其他搜索条件的辅助存在,只要包括搜索内容的字段都会作为结果返回,导致的问题就是搜索结果过于粗糙。基于数据结构特征法是指通过数据结构或者已知字段的一些特征,对内存进行扫描。由于在这种方法中会使用一系列的语言对特征进行精确描述,所以分析结果准确性较高,但相应的问题是,这种方法依赖于特征的存在,所以应用范围较为狭窄。基于操作系统关键数据结构法是指一种通过分析操作系统的关键数据结构来帮助取证的方法,由于操作系统中包含有很多关键数据结构,所以基于关键数据结构进行分析的方法就有很多种,通常对取证工作帮助最大的进程结构是EPROCESS[7-8]。

微信作为一种使用范围非常广泛的综合性工具,系统中的许多数据成为取证的重点,因此微信取证技术得到了越来越多的研究。

吴熙曦等[4]在基于KNN的Android智能手机微信取证方法中,提出了一种在大量微信聊天记录中快速锁定与案件有关内容的方法。他们利用同义词林计算微信聊天信息中的词语相似度,从中筛选最佳特征词,再通过向量表示会话,利用KNN算法对会话进行分类,从而实现较快速地从大量聊天会话内容中找到与案件相关的内容,提高微信取证的效率。汤帅等[5]提出了一种基于iOS平台进行微信取证的方法,利用iTunes对iPhone/iPad的备份文件进行提取,在备份文件中,可以还原出微信程序的信息文件,从而进行微信取证工作。马梦笔[6]在2015年对iOS平台下微信删除恢复的原理进行了研究及技术试验,针对基于iOS系统的取证研究工作,文中给出了恢复微信删除信息的若干种途径,所采用的方法与汤帅等的想法略同,也是通过取得iPad的备份文件,并通过越狱手段获得对备份文件的读写权限展开。王伟兵等[9]针对Android系统手机,对加密和解密进行了研究,提出了一系列新的取证方法,对存储在本地的加密信息提取微信中的通话记录和其他相关信息。姜华岩[10]对Android系统中SQLite数据进行了提取, 对百度地图、滴滴打车和携程三个应用程序的数据提取进行实验,发现最终得出的结果可以很好地提供嫌疑人的活动信息,为警方侦破案件提供很大便利。常亚翠[11]对Android中的SQLite数据库进行了解密分析,提出了一种Android手机远程数据提取的方法,实现Android手机未root时和root后两种情况下的数据获取。陈廷明[12]设计了一种Android系统存储数据取证系统,实现了数据提取、案件管理、数据查看、系统分析及报告,通过Android系统的API接口进行数据提取、删除数据恢复和提取。

从以上可以看出,目前微信取证技术研究的方向中,基于Android和iOS系统展开的研究占了主流。但PC版微信的取证技术研究工作有所缺失,成为了短板。此外,目前微信取证以数据文件为主要对象,研究从数据文件中提取数据、破解数据的方法,但是在实际取证中有大量的数据存在于内存中。在微信交流中,除了用户删除数据之外,还有撤回数据的情况,对撤回数据与删除数据的处理在取证工作中的并不相同。综上,本文的研究主题确定为采用内存取证技术对PC版微信撤回消息的分析技术研究。

2 PC版微信内存分析法

2.1 问题及分析

本文以对Windows 7操作系统下的微信for Windows 1.1.0.41版本研究为例,主要的研究目的是通过分析微信内存文件,找到能够定位撤回消息的方法。所提出的方法可以适合于其他版本的微信应用。

在微信中,如果一条信息被发送出的时间不超过2分钟,那么这条信息可以由该信息的发送方通过“撤回”操作进行撤回,而经过“撤回”操作之后,这条信息将消失于所有参与该聊天的用户的聊天界面上,并且无法通过微信所提供的功能重新恢复。本文的主要研究内容就是找出定位这条消息的方法,为今后进行各类撤回消息的复原提供一些技术基础。

微信发送的消息包括多种类型,例如:中文、英文、数字、表情、图片、语音、视频等;因为目前微信for Windows版本不支持发送语音消息,所以语音类型的消息在本文中就不作考虑了,因此本文主要分析的对象是前3类,即中文文本、英文文本和表情。

2.2 微信应用的内存分析环境配置

操作系统为Windows 7旗舰版操作系统,微信软件为for Windows 1.1.0.41版本。

在内存数据获取方面,采用的工具是pmdump进程内存文件转储工具;同时需要简单的字符串搜索匹配工具,要求支持十六进制数据的搜索,因此选择常用的UltraEdit32编辑器。

2.3 微信应用的内存数据获取方法

在PC版微信的默认安装中,可以发现微信内容存储信息位于C:UsersAdministratorAppDataRoamingTencentWeChat,Administrator是安装的用户名。这个路径下包括一些系统文件,打开之后我们发现里面存储了这个微信号最近接收到的部分文件和图片。该文件夹中还有一个最主要文件是MMdata数据库,存储用户登录记录等数据。但是由于数据存储和内存尚存在一定的同步点,因此这里我们主要考虑直接获取内存的方式。所使用的工具就是pmdump,它是一个命令行工具,能够在不结束程序运行的情况下转储(Dump)一个进程的内存内容。如图1所示,pmdump工具有两种功能,其一是在命令行中调用了pmdump工具之后,写入一个PID号(进程控制符)和一个文件名,pmdump将会把与输入的PID号对应进程的内存文件转储到与所输入的文件名对应的文件当中;其二是在调用pmdump之后写入“-list”,这个功能的作用是可以查看计算机中运行的所有进程以及它们对应的PID号。

图1 pmdump工具的使用方法

基于这个工具,通过-list参数获取微信进程的PID,进而通过pmdump pid可以将正在运行的微信进程内存信息转储到一个后缀名为.dmp的文件中。这个文件中包含了微信应用当前的内存数据,我们接下来的研究内容将全部围绕着这类文件进行展开。

2.4 内存转储文件分析

Pmdump工具转储出的内存文件是分析的基础,它是一个十六进制文件,需要用十六进制文件编辑器打开。本文采用UltraEdit十六进制编辑器进行观察和分析。接下来要进行的工作就是探究微信消息在内存文件中的位置和表现形式。

为了探究微信中各种消息类型分别都是怎样映射到微信内存文件中的,在接下来的过程中,我们将针对不同的消息类型分别进行实验来探究。研究内容包括:查看微信消息在内存文件中都是以怎样的形式进行保存的,是否微信聊天中撤回的消息也存在于内存文件当中,以及各种类型的撤回消息在内存文件中的格式是否都相同。在这里需要额外做出说明的是,由于微信不同版本之间内存文件的内容和格式可能差异较大,所以以下实验中的得出的关于内存文件的结论,目前只成立于微信for windows 1.1.0.41版本中,由于其他版本未经过实验验证,但是基本的分析方法是一样的。下面以中文、英文和表情信息为例进行介绍。

(1) 中文消息 在分析前进行测试对话,我们一共向微信测试账号发送了5条微信信息,并且撤回了其中的第4条,所撤回信息的文本内容为:“撤销”。如图2所示。

图2 中文文本对话内容

经过内存文件分析可以发现,所有的中文文本信息在内存文件中的保存内容都是经过了URL编码转换之后所得的形式。例如:

“微信取证”经过编码转换后为:“%e5%be%ae%e4%bf%a1%e5%8f%96%e8%af%81”;

“技术研究”经过编码转换后为:“%e6%8a%80%e6%9c%af%e7%a0%94%e7%a9%b6”;

“撤销”经过编码转换后为:“%e6%92%a4%e9%94%80”;

“完毕”经过编码转换后为:“%e5%ae%8c%e6%af%95”;

相应的内容可以利用UltraEdit的搜索操作比较快捷地从内存文件中找到,例如“微信取证”的信息如图3所示。其他的不再列出。

图3 编码转换后的“微信取证”

(2) 英文消息 按照类似的方法可以对英文消息进行测试分析。可以发现英文字符经过URL编码转换得到的结果就是它本身,所以在内存文件中查找英文类型的微信消息时,不需要像中文一样先将消息文本经过编码转换。但是由于微信内存文件本身是十六进制的文件格式,所以不能直接在16进制区域查找英文字母,在这个问题上,UltraEdit编辑器中提供了比较方便的解决方法,如图4所示。

图4 通过勾选“查找ASCII”进行ASCII码区域的搜索

对于本文的实验来说,可以得到如图5所示的查找结果,可以看到test1按照ASCII进行了编码。

图5 编码转换后的“test1”

(3) 表情消息 对于表情符而言,第一个需要解决的问题就是它是采用什么方式进行编码的。为此,可以按照同样的方法,利用测试账号发送微信信息,并让表情消息在在两个英文消息之间,这样便于后续进行定位分析。撤回其中的微信表情:[微笑]。

经过分析发现,如图6所示,我们在内存文件中找到了“test over”和“test biaoqing”这两条消息,而这两条消息中间夹着一条经过了编码转化的消息,由于它被夹在两条消息之间,按照位置分析,这条消息应该是我们所发送的表情信息,为了求证这个想法是否正确,可以将中间那条消息进行URL解码,即“%5B%E5%BE%AE%E7%AC%91%5D”经过解码之后的结果是[微笑]。

图6 在ASCII区域搜索test over,并定位表情消息

这说明在该版本的微信中,对自己本身资源内部的表情定义形式为文本“[表情名字]”形式。得出这个结论之后,针对表情类型的微信消息的还原技术就能够归并到文本类型的微信消息识别技术当中去了,由于其不存在特殊性,所以能够以同一种方式进行判断。

2.5 在内存文件中定位和提取撤回消息

经过对内存转储文件的分析,我们能够得出两个结论:一是消息内容在内存文件中的保存格式为经过URL编码转换之后得到的十六进制形式,中文文本在进行查找之前需要先进行编码转换;二是撤回消息在内存文件中依然保存了完整的内容信息,这就为我们接下来从内存文件中定位微信撤回消息的研究提供了可能性。其中最主要的问题是要如何寻找撤回消息的标志。

在使用微信的过程中,当我们发送了一条或者一条以上的语句后,选择一条消息撤回时,聊天界面上会在撤回的语句下面显示一个提示语句:“你撤回了一条消息”(如图1所示),于是我们可以假设微信的内存文件中应该同样也存在这条提示信息。于是,以上一节微信撤回消息内容是中文文本中得到的实验结果为例,我们进行了实验求证。

“你撤回了一条消息”经过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

在内存文件中进行搜索该编码串,发现该语句确实存在于内存文件内(如图7所示),并且通过观察可以发现,内存文件中通过在内容前后添加来阻隔区分系统提示消息“你撤回了一条消息”(下文中用字段指代)和用户输入消息。

图7 微信内存文件中找到的提示字段

进一步实验和数据分析表明,在微信内存文件中,我们可以通过 字段中“33 6B 6C 58”这个字段之后的8个字节来准确地找到撤回消息字段,并将这8个字节的内容称为匹配字段。由此,在微信内存文件中直接定位撤回消息字段位置的方法是:

(1) 首先在微信内存文件中搜索“33 6B 6C 58”,它是整个字段的起始位置。也就是,它是字段的一个标志,即能够通过查找“33 6B 6C 58”字段直接定位到字段。

(2) 之后提取“33 6B 6C 58”字段之后8个字节的内容作为匹配字段,如图8所示。这8个字节的内容称为匹配字段,所有的撤回消息和对应的字段之间都存在着这8个字节的重合,并且这种重合没有出现在其他微信消息中。

图8 字段中的匹配字段

(3) 接着再次向下做一次匹配字段的搜索,目的是要找到撤回消息字段的位置。此时,可能存在两种情况,第一种是直接匹配到了撤回消息字段,这意味着我们找到了撤回消息字段的位置,进入下一个步骤。另外一种情况是,在微信内存文件中存在不止一个字段,我们再次搜索时可能匹配到的是另外一个字段,在这种情况下就需要继续向下做匹配字段的搜索直到匹配到的是撤回消息字段。

(4) 找到撤回消息字段的匹配字段之后,从匹配字段结束之后的第25个字节开始提取,直到遇到结束符“0A 04 08 01”结束,提取出来的字段便是撤回消息文本段经过URL编码转换之后的形式。

最后,在多次不同的微信内存转储文件分析中,发现该方法能够正确地找出用户撤回的中文、英文和表情消息。

3 结 语

本文从微信取证技术的研究背景出发,介绍了微信内存文件的获取,内存分析,微信消息在内存文件中的内容与格式等内容。通过实验验证了该方法的可操作性和有效性。

本文研究结果也还存在不足。没有实现对所有的微信消息类型都能进行识别,对内存的分析也可以继续深入优化,将本文所设计的分析方法优化成为对众多微信版本都普适的判断方法也是今后值得进一步研究的。

猜你喜欢

字段内存编码
生活中的编码
带钩或不带钩选择方框批量自动换
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
浅谈台湾原版中文图书的编目经验
Genome and healthcare
内存搭配DDR4、DDR3L还是DDR3?
无正题名文献著录方法评述