朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队“设为星标”,否则可能就看不到了啦!
免责声明
"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"
引言
当今信息化时代下,存在于各类计算机设备中的数据信息已成为越来越多刑事案件侦查的线索来源。Windows操作系统作为当今全球计算机使用率最高的操作系统,针对Windows操作系统的电子数据取证一直是电子数据取证领域研究的重点之一例,其中针对Windows操作系统中用户常用应用软件的行为取证分析,成为公安以及黑客组织用来突破的途径之一。
中文输入法作为Windows中文操作系统必备的一款应用程序,不仅支持中文文字编码和输入的功能,还具有自定义、自学习用户词库功能,这一功能将系统用户常用或者符合用户用语习惯的字词句以一种特定的结构形式存储成独立的词库数据集文件,以方便后期提高输入效率。这类用户词库文件留存了大量的与系统用户直接相关的输入痕迹信息,如目标姓名、地址、谈话内容等关键词,都能在输入法用户词库中有所体现,但用户词库中所存储的这些信息往往被取证人员忽略。
通过对Win10系统自带中文输入法程序运行进程的分析,发现与中文输入法相关的用户词库文件主要存储在
C:UsersVipersecAppDataRoamingMicrosoftInputMethodChs
对所有文件的属性信息分析,发现其中文件名分别为ChsPinyinIH.dat和ChsPinyinUDL.dat的两个DAT文件,其属性信息会随着系统用户输入行为的发生而不断变化。但由于其是DAT类型文件,无法直接用常规方法获取记录信息。
因此,利用010editor对这两个文件进行分析,如图1所示,发现存储的信息具有一定规律性,数据块之间存在明显分隔,并且在Unicode方式显示下,可以很明显发现文件名分别为ChsPinyinlH和ChsPinyinUDL的DAT文件中零散存储着系统用户之前输入的字词句信息,并且均以Unicode明码的方式保存在数据区中。
ChsPinyinIH.dat
ChsPinyinUDL.dat
进一步分析ChsPinyinlH.dat和ChsPinyinUDL.dat两文件,发现ChsPinyinlH.dat文件记录着系统用户的中文字词输入信息,而ChsPinyinUDL.dat文件记录着系统用户的中文短句输入信息。
由此可知,Win10中文输入法用户词库信息采用独有格式进行存储,但没有采用复杂的加密算法对其进行保护处理。
逆向分析
因此,依据中文输入法的拼音特性,构建基于输入数据流的逆向分析策略,对词条信息的内部存储数据结构进行分析。具体逆向测试策略如下:
-
初始化用户词库文件信息,分别选定一个单词和短句,用Win10中文输入法各输入一次,其目的是探察两个文件存储输入信息的初始位置。
-
将策略1所选的单词和短句,用Win10中文输入法重复输入一次,其目的是探察同一词句输入次数改变对存储信息的影响。
-
有别于策略2的选择,另选内容不同、字数一样的单词和短句,用Win10中文输入法各输入一次,其目的是探察词句内容的改变对已存储输入信息位置的影响,即获取单个词条存储信息需占用的总长度。
-
有别于之前所有策略的选择,再另选内容不同、字数不同的单词和短句,用Win10中文输入法各输入一次,其目的是探察词句字数的改变对存储信息的影响。同时,结合策略3和策略4对比,内容和字数的改变对存储位置的影响。
依据上述基于数据流的逆向测试策略,对两个DAT用户词库文件进行结构分析,发现ChsPinyinlH和ChsPinyinUDL两个DAT文件存储的输入记录信息数据起始位置分别是在文件偏移地址0x1400处和0x2400处,每条用户输入记录信息的存储长度都是固定的,占用60个字节。
同时,发现ChsPinyinlH.dat文件对用户每条输入行为信息的存储结构主要按如下图所示的固定格式进行存储。
其中关键信息主要在第一部分和第三部分的4个字节以及第四部分的24个字节,第一部分存储此条字词的字数,第三部分存储词条字词被输入的次数,第四部分则存储了此条字词的具体内容。
而ChsPinyinUDL.dat文件对用户每条输入行为信息的存储结构主要按如下所示的固定格式进行存储。其中关键信息主要在第二部分的2个字节和第四部分的48个字节,第二部分存储此条短句的字数,第四部分存储了此条短句的具体内容。
痕迹提取
使用python 编写提取代码:
f = open("ChsPinyinUDL.dat","rb")
data = f.read()
data = data[9216:]
f.close()
i = 60
n=1
while True:
chunk = n*i
chunk_len = data[chunk+12:chunk+12+48]
hex_chunk_len = ['%02x' % b for b in chunk_len]
print(chunk_len.decode("utf-16"))
n+=1
if chunk>=len(data):
break
f = open("ChsPinyinIH.dat","rb")
data = f.read()
data = data[5120:]
f.close()
i = 60
n=1
while True:
chunk = n*i
chunk_len = data[chunk:chunk+4]
hex_chunk_len = ['%02x' % b for b in chunk_len]
print(hex_chunk_len[::-1])
unicode_chunk = data[chunk+12:chunk+12+data[chunk]*2]
hex_unicode = ['%02x' % b for b in unicode_chunk]
print(hex_unicode[::-1])
print(unicode_chunk.decode("utf-16"))
n+=1
if chunk>=len(data):
break
原文始发于微信公众号(SecretTeam安全团队):后渗透系列 Windows10\11 中文用户输入痕迹信息
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论