感谢ndkrempel,十六进制的日期部分已被破译。时间仍有待解码。然而,随着ndkrempel在这个主题上的工作我已经意识到整个时间戳包括一个额外的7个字节,我以前忽略了,因为我的文件通常包含零分钟或秒的时间戳。以下是一些“完整”十六进制序列,希望包含准确转换所需的剩余时间数据:
C00AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA3F0CF712000000 = 17.05.1208.00.001024
C00AE440ABAAAAAAAAAAE23F555555555555D53FABAAAAAAAAAAEA3F0CF71200E0C4 = 17.05.1214.00.001024
C00AE440610BB6600BB6E23F555555555555D53FABAAAAAAAAAAEA3F0CF7120058C5 = 17.05.1214.02.001024
C00AE440176CC1166CC1E23F555555555555D53FABAAAAAAAAAAEA3F0CF71200D0C5 = 17.05.1214.04.001024
C00AE440CDCCCCCCCCCCE23F555555555555D53FABAAAAAAAAAAEA3F0CF7120048C6 = 17.05.1214.06.001024
各种时间的附加十六进制代码
C00AE440721CC7711CC7E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200E00F01 = 17.05.1219.20.001024
C00AE440CDCCCCCCCCCCE93F555555555555D53FABAAAAAAAAAAEA3F0CF712001C1001 = 17.05.1219.21.001024
C00AE440287DD2277DD2E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200581001 = 17.05.1219.22.001024
C00AE440DEDDDDDDDDDDE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200D01001 = 17.05.1219.24.001024
C00AE440398EE3388EE3E93F555555555555D53FABAAAAAAAAAAEA3F0CF712000C1101 = 17.05.1219.25.001024
C00AE440943EE9933EE9E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200481101 = 17.05.1219.26.001024
C00AE440EFEEEEEEEEEEE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200841101 = 17.05.1219.27.001024
C00AE4404A9FF4499FF4E93F555555555555D53FABAAAAAAAAAAEA3F0CF71200C01101 = 17.05.1219.28.001024
C00AE440A54FFAA44FFAE93F555555555555D53FABAAAAAAAAAAEA3F0CF71200FC1101 = 17.05.1219.29.001024
C00AE440000000000000EA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200381201 = 17.05.1219.30.001024
E00AE4404A9FF4499FF4EA3F555555555555D53FABAAAAAAAAAAEA3F0CF712004C1C01 = 18.05.1220.13.001024
E00AE440D8822DD8822DEB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A41E01 = 18.05.1220.23.001024
E00AE440666666666666EB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200FC2001 = 18.05.1220.33.001024
E00AE440F5499FF4499FEB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200542301 = 18.05.1220.43.001024
E00AE440832DD8822DD8EB3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AC2501 = 18.05.1220.53.001024
E00AE440111111111111EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200042801 = 18.05.1221.03.001024
E00AE4409FF4499FF449EC3F555555555555D53FABAAAAAAAAAAEA3F0CF712005C2A01 = 18.05.1221.13.001024
E00AE4402ED8822DD882EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B42C01 = 18.05.1221.23.001024
E00AE440BCBBBBBBBBBBEC3F555555555555D53FABAAAAAAAAAAEA3F0CF712000C2F01 = 18.05.1221.33.001024
E00AE440176CC1166CC1EC3F555555555555D53FABAAAAAAAAAAEA3F0CF71200482F01 = 18.05.1221.34.001024
E00AE440E42DCDC10BABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A28C00 = 18.05.1210.00.021024
E00AE4401DB1EFD86CABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A48C00 = 18.05.1210.00.041024
E00AE440563412F0CDABDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A68C00 = 18.05.1210.00.061024
E00AE44090B734072FACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200A88C00 = 18.05.1210.00.081024
E00AE440C93A571E90ACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AA8C00 = 18.05.1210.00.101024
E00AE44002BE7935F1ACDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AC8C00 = 18.05.1210.00.121024
E00AE4403C419C4C52ADDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200AE8C00 = 18.05.1210.00.141024
E00AE44075C4BE63B3ADDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B08C00 = 18.05.1210.00.161024
E00AE440AE47E17A14AEDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B28C00 = 18.05.1210.00.181024
E00AE440E7CA039275AEDA3F555555555555D53FABAAAAAAAAAAEA3F0CF71200B48C00 = 18.05.1210.00.201024
前言:我尽我所能检查并且我正在处理的十六进制似乎不符合“标准”十六进制日期/时间格式(time_t,time_64,DATE,DOS日期/时间为由Hex Workshop计算,以及DCode时间解码器应用程序检查的所有格式。
我正在尝试编写批处理对话实用程序来处理由内部未记录的软件生成的专有文件格式。我有能力将这些文件转换为一个长期被遗忘且文档记录较差的文件,但这是一个耗时且繁琐的过程,我希望自动化。
只需使用十六进制编辑器,我就能找到所需的一切,除了日期和时间在原始文件中的编码方式。我确信我已经识别出代表我所追踪数据的27字节十六进制序列,因为我可以编辑它以更改日期并将其插入另一个文件以传输日期。但是,我想了解它是如何实际生成的,因此我可以隐藏具有未知日期的文件。
下面是十六进制序列的示例(左)以及它们在转换后的文件中产生的时间戳(右侧格式为:DD.MM.YYHH.MM.SS)。有些是直接从软件生成的文件中获取的,有些是我手动编辑的序列,用于查看日期的更改方式。任何年份> 12的东西都是我修改十六进制的结果。有没有人有什么建议?我不是一个程序员,我在这里。
80D8E340ABAAAAAAAAAAEE3F555555555555DD3FABAAAAAAAAAAEE = 11.04.1123.00.001024
E008E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 02.05.1208.00.001024
E001E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 07.03.1208.00.001024
600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024
610AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024
6001E440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 03.03.1209.00.001024
0101E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 29.02.1208.00.001024
01010140555555555555D53F555555555555D53FABAAAAAAAAAAEA = 01.01.0008.00.001024
01010101555555555555D53F555555555555D53FABAAAAAAAAAAEA = 30.12.9908.00.001024
600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024
60FFE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 25.09.1709.00.001024
60FFE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEA = 25.09.1709.00.001024
60FFE440000000000000D83FABAAAAAAAAAADA3FABFFFFFFFFFFEA = 25.09.1709.00.001024
60FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.001024
01FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024
02FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024
10FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 22.09.1709.00.001024
20FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 23.09.1709.00.001024
30FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 23.09.1709.00.001024
40FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 24.09.1709.00.001024
50FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 24.09.1709.00.001024
60FFE440000000000000D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.001024
600AE440000000000000D83FAB0000000000DA3FAB0000000000EA = 14.05.1209.00.001024
60FAE440000000000000D83FAB0000000000DA3FAB0000000000EA = 16.08.1709.00.001024
60FAE540000000000000D83FAB0000000000DA3FAB0000000000EA = 26.03.2309.00.001024
60FFE440FFFFFFFFFFFFD83FAB0000000000DA3FAB0000000000EA = 25.09.1709.22.301024
60FFE440010101010101D83FAB0000000000DA3FAB0000000000EA = 25.09.1709.00.051024
40DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 27.05.1117.00.001024
60DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 28.05.1117.00.001024
800AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 15.05.1208.00.001024
另外,我应该提到最后14个字节似乎并不是特别重要(尽管它们在原始文件中确实发生了变化)。例如,以下序列在转换后产生相同的输出。我不知道这些值是否被舍入或在转换过程中被剥离。无论如何,如果我能确定月,日,年,小时,分钟和秒,那部分并不重要。
E008E440555555555555D53F555555555555FFFFFFFFFFFFFFFFFF = 02.05.1208.00.001024
E008E440555555555555D53FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF = 02.05.1208.00.001024
E008E440555555555555D53F000000000000000000000000000000 = 02.05.1208.00.001024
以下内容仅由源软件生成,尚未手动修改。
40DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 27.05.1117.00.001024
60DEE340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 28.05.1117.00.001024
80D8E340ABAAAAAAAAAAEE3F555555555555DD3FABAAAAAAAAAAEE = 11.04.1123.00.001024
E008E440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 02.05.1208.00.001024
600AE440000000000000D83FABAAAAAAAAAADA3FABAAAAAAAAAAEE = 14.05.1209.00.001024
800AE440555555555555D53F555555555555D53FABAAAAAAAAAAEA = 15.05.1209.00.001024
以下是来自不同时间的文件的未修改十六进制序列:
A0B7E340ABAAAAAAAAAAE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 22.07.1016.00.001024
C0B7E340777777777777E73FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 23.07.1017.36.001024
A0EFE340CDCCCCCCCCCCE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 13.10.1117.06.001024
80EFE340BCBBBBBBBBBBE63FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 12.10.1117.03.001024
C0EEE340ABAAAAAAAAAAE13FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 06.10.1113.15.001024
60D5E340ABAAAAAAAAAACA3FABAAAAAAAAAACA3FABAAAAAAAAAAE6 = 17.03.1105.00.001024
非常感谢任何帮助或建议。
答案 0 :(得分:3)
我在解码日期/时间格式方面取得了一些进展。具体来说,我可以阅读日期,但我还没有尝试过阅读时间。
我认为格式包含许多无关的,可能是垃圾数据;并且只有少数字节具有重要性。
日期仅以字节0,1和2(前3个字节)编码。
通过将前4个字节解释为小端双字(4字节)数量x来解释是最容易的。那么天数,作为1989-09-17的偏差,由
给出d =(x& 0x000FFFFF)>> 5
即。你只看了20个低阶位,而忽略了5个最低阶位。您可以通过说日期编号以5-19位(包括15位数量)编码来总结这一点。
可能时间在数据的不同位置进行类似编码,但没有多少不同时间的例子,我也需要睡觉!
好的,您提供的许多预先存在的数据(不是您手动生成的数据)似乎已经篡改了时间值(可以想象是其中一个相关程序的本地时区转换结果)。但只要继续你生成的那些,似乎时间编码如下:
取字节9和10(我的意思是第10和第11字节),并将它们视为小端字x。掩盖前2位,留下14位数量:
t = x& 0x3FFF
这表示一天中的时间。它的单位是0对应于00:00:00和(一个过去)最大值16384对应于24:00:00。这使它的分辨率约为5.3s。
换句话说,
s = t / 16384. * 24. * 60. * 60。
将时间作为午夜过后的秒数。
好的,看看你现在提供的额外字节,字节32和33(最后2个字节)似乎是另一个时间戳。再次将它作为小端字x处理,它直接编码从午夜开始的秒数。当它为0时,似乎使用上述时间戳代替。它似乎只能在溢出之前描述时间到18:22,所以它可能还会使用前一个字节的额外位?没有足够的数据可以说了。
字节34是上述的延续。即将字节32,33和34作为小端3字节数量,然后,至少当它不为零时,它给出从上午午夜开始的秒数。