1

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' 
3
  • Can you send these packets at set intervals and see how the supposed time changes and provide more samples here? It could just simply be xored with some value for example. Commented Jul 3, 2023 at 6:33
  • @sudhackar I can't easily generate the data. A record is generated each time a player kills another player with a knife. I'll try to get someone to hop in game with me to try and generate more data. I also just added the timestamps to the known examples I have, of which to are shown with the same timestamp in game. Commented Jul 3, 2023 at 18:19
  • Old games often used custom formats for datetime, i think it'd be easier to decompile and analyse the data-unpacking code rather than guessing the pattern Commented Jul 4, 2023 at 11:51

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.