I loved this challenge, it exactly my cup of tea in the lands of obscurity.
Here's the code provided in the challenge:
#includevoid one(char k) { unsigned int i, bytes[]={0x0a,0x5d,0x2c,0x0b,0x37,0x38,0x04,0x05,0x1f,0x4c,0x05,0x1f,0x4c,0x02,0x03,0x18,0x4c,0x18,0x04,0x09,0x4c,0x0f,0x03,0x08,0x09,0x4c,0x15,0x03,0x19,0x4b,0x1e,0x09,0x4c}; for(i=0; i<32; i++) printf("%c",(char)bytes[i]^k); printf("\n"); } char two(char c) { return (c^0x32)-7; } void main(int argc, char** argv) { // lo0kin-fo one(two('A')); }
First I tried compiling it and looking at the output. When doing this we get the following:
f1@g[This is not the code you're
Cool, starts with a lead! That's nice!
After trying to change the 'A' value on line 22, to see if it changed the output, I got nothing and moved on to look for other clues.
Playing around in vim, one act I occasionally play with is pressing $ to go to the end of the line and skimming through the code by hitting each end point. In this case, there were a few spaces after one of the lines. With a past in heavy code reviews, this made me a little uneasy inside, so I decided to do another quick check:
/\tWith that we get wayy too many tab characters in irregular places:
This immediately redirects my thoughts to Whitespace, the programming language. If you're unfamiliar with whitespace, you can check out an example program here - http://www.99-bottles-of-beer.net/language-whitespace-154.html
The gist is that it's a language completely comprised of spaces, tabs, and linefeeds.
Because it's whitespace, and not the most supported in the world, I decided to do something I rarely find myself doing - finding an online compiler. In this case, there was a great one with a gomod example of whitespace found here - http://www.tutorialspoint.com/execute_whitespace_online.php (If anyone knows of good offline *nix whitespace compilers, please leave them in the comments section below!)
lo0kin-fo]
This resulted in the full flag:
f1@g[This is not the code you're lo0kin-fo]