It was a pretty simple chall. Apparently no input from the user was taken. The binary was given which was running on the server. It calculates a key based on the time you connect to the binary and then decrypts a payload which is then executed. When the key is correct, the flag is read and printed to stdout. We wait for that "Window of Opportunity".
Here's how I did it:

The relation between time and key:

key = (((time & 0xFFC) << 16) - 0x14C437BE) ^ ((time & 0xF0) << 8) | ((time & 0xFFC) << 8) | ((time >> 8) << 24) | time & 0xFC

This shows only last 2 bytes matter.

We have at most $2^{16}$ combinations, but some operations make it lesser.

+ Only 787 possible keys.
+ Run the program with all keys under gdb to figure out the correct based on if the program crashes. Only one correct key => 0xff4fdc56L
+ Connect to the server at the time when the correct key is derived

All scripts [here](https://gist.github.com/sudhackar/b90987864dd88dfe528542bea9d901be)

Original writeup (https://gist.github.com/sudhackar/b90987864dd88dfe528542bea9d901be).