这学期初,给学生们出了一道课后练习题,让同学们巩固课堂上学习的进制转换、字节序、数字时间、WinHex & X-Ways Forensics相关的知识。
题目如下:
以管理员权限打开WinHex,加载C盘,找到$MFT文件,该文件的0x50至0x6F之间有4个filetime时间戳,他们是小端字节序存储的。请尝试解析第一个时间戳到类似“2023-03-14 09:00:00”的格式,请写出详细的操作步骤并附上各环节必要的截图。
以下是参考答案:
**步骤1:**右击“WinHex”图标,选择“以管理员身份运行”。如下图所示。
**步骤2:**点击WinHex菜单栏“工具”→“打开磁盘”,然后选择逻辑驱动器中的C盘[ 如果多个同学使用同一台电脑做实验,第一个同学选择C盘,第二个同学则可选择D盘,以此类推。],并点击“确认”按钮。如下图所示。
**步骤3:**找到文件中0x50-0x57范围的数据,对于当前WinHex界面,此数据位于第五行前八个字节,即“A7 1E C7 89 E4 B8 D6 01”。如下图所示。
**步骤4:**将数据转换为十六进制数字。由于此处的filetime时间戳是小端字节序(Little-endian)存储,“A7 1E C7 89 E4 B8 D6 01”表示的实际数字为“01D6B8E489C7AEA7”。
**步骤5:**将十六进制数字转换为十进制数字。打开Windows内置的计算器工具,点击菜单栏“查看”,选择“程序员”。在十六进制模式下输入“1D6B8E489C7AEA7””,然后点击“十进制”转换为十进制数字,即为“132496530757627559”。如图 5所示。
根据filetime时间戳的定义,“时间起点”为1601-01-01 00:00:00,记录的时间精度为100纳秒(即10-7秒),所以数字“132496530757627559”意味着时间戳“A7 1E C7 89 E4 B8 D6 01”所表示的是从1601-01-01 00:00:00经过132496530757627559个100纳秒后的时间,即从1601-01-01 00:00:00经过13249653075秒的时间。
**步骤6:**日期时间计算。一天等于86400秒(60×60×24=86400)。13249653075/86400 = 153352.466145833;13249653075%86400 = 40275。所以步骤5中计算的时间为1601年1月1日后又经过了153352天加40275秒。
**步骤7:**日期计算。打开Windows内置的计算器工具,点击菜单栏“查看”,勾选“日期计算”。计算得知1601年1月日至2020年11月12日经过了153352天。如图 6所示。
所以,“A7 1E C7 89 E4 B8 D6 01”代表的是2020年11月12日经过40275秒后的时间。
**步骤8:**时间计算。一小时等于3600秒。40275/3600 = 11.1875;40275%3600 = 675。进一步换算可知675秒等于11分15秒。
综上,filetime时间戳“A7 1E C7 89 E4 B8 D6 01”表示的时间是UTC时间2020-11-12 11:11:15,换算成北京时间则是2020-11-12 19:11:15。
实际上,题目中的$MFT文件0x50至0x6F之间有4个filetime时间戳的第一个,正好是$MFT的创建时间,也是该分区的格式化时间。
Filetime时间戳在Windows中被广泛使用,NTFS文件系统中文件的时间全部是以这种格式保存。回收站痕迹、快捷方式文件、跳转列表中的时间也以filetime时间戳保存。