This is my writeup for Gatekeeping, one of my favorite challenges from UIUCTF. It was also one of the tougher challenges in the competition, worth 417 out of 500 possible points by the end of the event with dynamic scoring.
It is a miscellaneous/hardware challenge written in Verilog. The solution is to reverse the code and figure out the input bits that lead to the output being True. This can be done by parsing the file and building a tree. The values of each state, wire, and bit can then be determined using algorithms such as DFS or BFS. Click the link to see the code and a nice visualization is included.