Level 5 - Syntra (rev)

Given binary:

12MB
Open

The front-end of the service looks like this:

All 6 buttons are clickable.

When we click play or next it just plays some classical music track.

Although you could start by reverse engineering the javascript on the webpage, I opted to try to reverse engineer the given binary instead.

I decided to use this opportunity to try integrating GitHub Copilot with an IDA Pro MCP (the MCP setup can be found here). I interchanged between Claude Sonnet 4 and ChatGPT 5 depending on which one gave a more legitimate-looking answer.

From my own (very brief) analysis, there seemed to be a flag at location assets/flag.mp3

The important functions are:

  • main_parseMetrics : Parses the metrics provided (which are a set of key-value pairs)

  • main_determineAudioResource : Determines which audio resource to use

  • main_evaluateMetricsQuality : If this returns true, flag.mp3 is played. Otherwise, a random music file from assets/music is played

The LLMs were unable to get the correct metrics from the start. However after several prompts, it was able to obtain a set of baseline pairs:

which were obtained from XORing calibration and correction factors. It then adds timestamps to the key-value pairs.

One thing which helped me determine if the LLM produced the right key-value pairs was asking it to attempt each set of values thrice. If the MD5 hashes of the obtained audio files were different then we most likely didn't get the flag. If they were all the same, however, then it is highly likely that we got the flag.

Below is the final solve script:

Last updated