I am missing a piece of the puzzle that is the TCP protocol the Battlefield Bad Company games use to transfer dogtag records to/from the FESL backend. The general packet structure is quite clear and I know the meaning of most of the 24 character bytestring sent for each record. However, the game shows a timestamp for each record, which I so far fail to extract from the data.
b'MIK813\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\xb0\xeb\xe1\x00\x01\x0e\x00' - player name, often but not always followed by a bunch of null bytes
- 4 bytes, meaning unknown (I suspect this is the timestamp)
- 2 bytes, number dogtags taken from player
- 1 byte, player rank (at time of [last?] dogtag taken)
- 1 byte, meaning unknown (seems to always be \x00, so it may just be an end marker)
Based on this structure, the timestamp would be this
b'E\xb0\xeb\xe1' However, unpacking that as an unsigned int (Big Endian) gives me 1169222625. That would be some time in January of 2007. But I know that this was today. The game shows July 2nd 2023, 12:38 for this record. The Unix timestamp for that would be around 1688301494. Other records unpacked as unsigned int result in values that are not even valid as a Unix timestamp. Based on how different the values are, it also does not seem like an offset from a common timestamp.
So, how is the timestamp encoded? What am I missing here?
Some more examples:
# July 3rd 2023 12:48 b'Brain Wrought\x00\x00\x00E\xb0\xeb\xef\x00\x01\x19\x00' # July 3rd 2023 12:48 b'lemenkool\x00\x00\x00\x00\x00\x00\x00E\xb0\xeb\xef\x00\x01\t\x00' # July 3rd 2023 12:23 b'FauxNameless\x00\x00\x00\x00E\xb0\xeb\xcc\x00\x01\x19\x00' # July 3rd 2023 12:17 b'Darklord90xx\x00\x00\x00\x00E\xb0\xeb\xc4\x00\x01\x00\x00'