This challenge was something pretty different than what I work on typically. It was a beginner/easy challenge, so I decided to see if I could crack it. I had to learn some information, so I will share that here…
According to PC Mag, RTL is “A high-level hardware description language (HDL) for defining digital circuits. The circuits are described as a collection of registers, Boolean equations, control logic such as ‘if-then-else’ statements as well as complex event sequences; for example: ‘if the clock signal goes from 0 to 1, then load register A with the contents of register B plus register C.’”
Here is the challenge description:
The challenge ‘flag.vcd’ file contents:
Click here for code
Steps
1.) The most immediately obvious thing about this challange is the binary data that changes as the signal state appears to change over time. Unironically, those binary values are the focus of this challenge, we just need to see past the preceeding ‘b’ values.
2.) Inside of the description, it is apparent that the first character we need is a capital ‘p.’ I took the first binary value (01010000), converted it to numerical representation (80), and finally to ASCII (P). It became clear that I had found the path to solve.
3.) I took all of the values into Excel to trim them, but I probably would have written a script if this was any longer. The visual below is easier to follow for how I collected the flag. Duplicates needed to be removed, so I took that liberty for your ease of understanding:
4.) I submitted my flag and got the solve: PCTF{RTL_i$_D@D_0F_H@rdw@r3}
Lessons Learned
1.) Learning new stuff is always a fun time. Prior to this experience, I had not been exposed to RTL, so I am glad to have the chance.
2.) Persistence and attention to detail are key if you don’t know where to start.