我正在使用 EnCase 和十六进制编辑器来分析虚拟驱动器。
EnCase 表示这个十六进制:5FBF60C54F2CCF01
是日期/时间 (mm/dd/yy):02/17/14 09:18:54 (PM)
我以前曾成功计算出日期/时间,但无法匹配上面的内容。
如果有人可以确认 EnCase 是正确的并向我解释,那就太好了。
答案1
硒这里. (“NTFS 时间戳的解释”,摘自 forensicfocus.com)
根据 Windows 软件开发工具包中“FILETIME”数据结构的文档,NTFS 文件时间戳是“一个 64 位值,表示自 1601 年 1 月 1 日(UTC)以来 100 纳秒间隔的数量”。
从此内部格式转换为更适合人类解释的格式由 Windows 系统调用 FileTimeToSystemTime() 执行,它从时间戳数据中提取年、月、日、时、分、秒和毫秒。在其他平台(例如 Unix)上,或在有意独立于平台的软件(例如 Perl 或 Java)中,需要使用其他转换方法。
FileTimeToSystemTime() 的文档以及实际测试表明,要转换的 FILETIME 值必须为 0x7FFFFFFFFFFFFFFFF 或更小。这对应于时间 30828-09-14 02:48:05.4775807。
(等等等等)
/编辑:虽然你的日期应该是今年 2 月 20 日星期六23464(没有拼写错误)。你的 NTFS 可能坏了吗?
(这里'计算器。使用“filetime”设置,并确保以十进制形式输入数字。)
答案2
您可以在 WinDbg 中解决这个难题。只需启动任何程序并附加到它即可。
然后,将数据写入内存中:
0:001> eq 7731000c 5FBF60C54F2CCF01
并将其解释为 ole32!FILETIME
0:001> dt ole32!FILETIME 7731000c
Feb 20 16:57:50 23464
+0x000 dwLowDateTime : 0x4f2ccf01
+0x004 dwHighDateTime : 0x5fbf60c5
正如你所见,这还远在未来。
但是,EnCase 可能会按字节显示写入磁盘的值,因此您会遇到 LSB/MSB 问题。让我们按字节输入数据:
0:001> eb 7731000c 5F BF 60 C5 4F 2C CF 01
以 64 位格式输出,注意字节现在是相反的顺序。
0:001> dq 7731000c L1
7731000c 01cf2c4f`c560bf5f
解释为 FILETIME:
0:001> dt ole32!FILETIME 7731000c
Feb 18 02:18:54 2014
+0x000 dwLowDateTime : 0xc560bf5f
+0x004 dwHighDateTime : 0x1cf2c4f
但不确定为什么会差几个小时。也许是时区问题。