Datetime 将十六进制值反向工程为时间-日期格式

Datetime 将十六进制值反向工程为时间-日期格式,datetime,timestamp,hex,reverse-engineering,Datetime,Timestamp,Hex,Reverse Engineering,我记录了两台设备之间的蓝牙传输,我想对协议进行反向工程。我把一切都弄清楚了,但日期时间格式没有。 我有以下已知的十六进制值和日期对: 00:fe:a6:11:f5:0d:c7:19:00:ff:01:09:00:00:00:00 --> 03.06.2017 - 07:44:06 00:fe:68:40:f4:0d:da:15:00:ff:01:09:00:00:00:00 --> 02.06.2017 - 16:51:20 00:fe:33:3d:f4:0d:c6:14:00:

我记录了两台设备之间的蓝牙传输,我想对协议进行反向工程。我把一切都弄清楚了,但日期时间格式没有。 我有以下已知的十六进制值和日期对:

00:fe:a6:11:f5:0d:c7:19:00:ff:01:09:00:00:00:00  --> 03.06.2017 - 07:44:06
00:fe:68:40:f4:0d:da:15:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 16:51:20
00:fe:33:3d:f4:0d:c6:14:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 16:37:39
00:fe:83:1d:f4:0d:ba:15:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 14:22:27
00:fe:c2:19:f4:0d:7d:16:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 14:06:26
00:fe:f5:15:f4:0d:b2:16:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 13:50:13
00:fe:67:14:f4:0d:e4:16:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 13:43:35
00:fe:80:0f:f4:0d:6a:17:00:ff:01:09:00:00:00:00  --> 02.06.2017 - 13:22:40
如何将其从十六进制值转换为日期/时间格式?我已经尝试过,如果他们以unix时间戳格式传输日期/时间,但似乎他们使用了不同的方式

有人看到解决办法了吗


谢谢

我需要更多的数据才能完全理解发生了什么,但以下是我可以从有限的可用数据中收集到的信息:

|Grp 1 |Grp 2 |Grp 3 |Grp 4 | Grp 5 | Padding? | |------|------|------|------|-----------|------------| |00 fe |a6 11 |f5 0d |c7 19 |00 ff 01 09|00 00 00 00 | : 03.06.2017 - 07:44:06 |00 fe |68 40 |f4 0d |da 15 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 16:51:20 |00 fe |33 3d |f4 0d |c6 14 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 16:37:39 |00 fe |83 1d |f4 0d |ba 15 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 14:22:27 |00 fe |c2 19 |f4 0d |7d 16 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 14:06:26 |00 fe |f5 15 |f4 0d |b2 16 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 13:50:13 |00 fe |67 14 |f4 0d |e4 16 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 13:43:35 |00 fe |80 0f |f4 0d |6a 17 |00 ff 01 09|00 00 00 00 | : 02.06.2017 - 13:22:40 |Grp 1 | Grp 2 | Grp 3 | Grp 4 | Grp 5 |衬垫| |------|------|------|------|-----------|------------| |00 fe | a6 11 | f5 0d | c7 19 | 00 ff 01 09 | 00 |:03.06.2017-07:44:06 |00 fe | 68 40 | f4 0d | da 15 | 00 ff 01 09 | 00 |:02.06.2017-16:51:20 |00 fe | 33 3d | f4 0d | c6 14 | 00 ff 01 09 | 00 |:02.06.2017-16:37:39 |00 fe | 83 1d | f4 0d | ba 15 | 00 ff 01 09 | 00 |:02.06.2017-14:22:27 |00 fe | c2 19 | f4 0d | 7d 16 | 00 ff 01 09 | 00 |:02.06.2017-14:06:26 |00 fe | f5 15 | f4 0d | b2 16 | 00 ff 01 09 | 00 |:02.06.2017-13:50:13 |00 fe | 67 14 | f4 0d | e4 16 | 00 ff 01 09 | 00 |:02.06.2017-13:43:35 |00 fe | 80 0f | f4 0d | 6a 17 | 00 ff 01 09 | 00 |:02.06.2017-13:22:40
  • 第一组:一年
  • 第二组:不确定。可能与时间的计算方式有关
  • 第三组:我很有信心这是一天和一个月。如果我的猜测正确的话,它的包装相当紧密
  • 第四组:我有预感这是小时/分/秒。至少,这和第二组是以某种方式联系在一起的
  • 第5组:不太可能与时间戳相关
  • 填充:我假设这只是从未使用过的空白空间
真正能够逆转协议的唯一方法是拥有大量不同的信息。具有不同年/月/日的日期以及具有相似小时但不同分/秒的时间戳等

如果这对你没有多大帮助,我向你道歉,祝你好运

谢谢你的回答

我发现了日期和时间是如何被解码的。 GRP3和GRP2在unix时代处于little endian,但奇怪的是从2010年开始,而不是从1970年开始

所以我必须加上40年才能得到正确的年份

例如:

00:fe:a6:11:f5:0d:c7:19:00:ff:01:09:00:00:00:00  --> 03.06.2017 - 07:44:06
unix时间解码:

0d:f5:11:a6 --> 234164646 -> unix time stamp 1977-06-03T05:44:06+00:00 in ISO 8601
在这个unix时间戳上加上40年,我得到了正确的日期和时间