这个日期时间的格式是什么?

逆向工程 二元分析
2021-07-06 16:23:24

我一直在编写一个小型库来解析 Sage Accounts 50 使用的数据文件,但我对它如何存储日期感到非常困惑。

我相当确定会有一个日期创建和日期修改。

这应该包含修改日期 05/01/2014

01 00 00 00 01 00 00 27 00 00 00 65 87 A9 CB 80 55 E4 40 EA 7D BC E5 1B 55 E4 40 65 87 A9 CB 80 55 E4 40 00

12/02/2014:

01 00 00 00 01 00 00 29 00 00 00 72 11 06 D0 81 55 E4 40 EA 7D BC E5 1B 55 E4 40 72 11 06 D0 81 55 E4 40 00

2014 年 6 月 16 日:

01 00 00 00 01 00 00 2B 00 00 00 6A F8 DB D4 81 55 E4 40 EA 7D BC E5 1B 55 E4 40 6A F8 DB D4 81 55 E4 40 00

2013 年 12 月 12 日:

01 00 00 00 01 00 00 2D 00 00 00 F8 F1 96 E6 81 55 E4 40 EA 7D BC E5 1B 55 E4 40 F8 F1 96 E6 81 55 E4 40 00

任何帮助将非常感激。我已经尝试过寻找 unix 时间戳struct tm,但没有任何运气。

谢谢

编辑

根据这里的要求,有一些更连续的日期:

01/12/13 - 01 00 00 00 01 00 00 2F 00 00 00 7C E8 A9 80 94 55 E4 40 EA 7D BC E5 1B 55 E4 40 7C E8 A9 80 94 55 E4 40 00
02/12/13 - 01 00 00 00 01 00 00 31 00 00 00 81 59 DC 89 94 55 E4 40 EA 7D BC E5 1B 55 E4 40 81 59 DC 89 94 55 E4 40 00
03/12/13 - 01 00 00 00 01 00 00 33 00 00 00 BF 58 F2 8B 94 55 E4 40 EA 7D BC E5 1B 55 E4 40 BF 58 F2 8B 94 55 E4 40 00
1个回答

这些是 64 位 OLE 日期格式,但它们不是您认为的日期。我拿走了你所有的样本,并按照你发布的顺序(从上到下)对它们进行了分类。然后,我将从每个样本的字节 11 开始的 8 字节字符串解码为 IEEE 格式的双精度值,然后以文本形式转储浮点数。(我编写了一个快速的 C++ 程序,但可以使用许多其他方法来实现。)然后我将它们放入电子表格中(我使用的是 Libre Office,但也可以使用 Excel)将它们解释为 Microsoft 的 64 位 OLE 日期格式这是从 1899 年 12 月 30 日 0:00:00 开始的秒数,得到以下(mm/dd/yyyy 格式):

01/05/2014 00:35:48 41644.02486
01/05/2014 01:21:34 41644.05664
01/05/2014 01:22:25 41644.05723
01/05/2014 01:25:32 41644.0594
01/05/2014 15:22:37 41644.64071
01/05/2014 15:24:14 41644.64183
01/05/2014 15:24:36 41644.64208

看起来最后三个样本是在两分钟内按顺序创建的,这对我来说很有意义。所以它们确实是日期,但不是你认为的日期。在其他地方查找文件中以 0x40 结尾的 8 字节序列的更改。