Challenge Writeup
When unpacking and executing the binary both via the command line and as an GUI application, nothing happens. So let's load the binary into IDA. Whilst analyzing the main function we see that we are expected to supply an argument when executing the binary. If we supply one argument, that argument will be used as a parameter for the function sub_401000. If we try executing the binary via the command line again, and supply an argument, we receive two strings and the application exits. Time to dive in deeper.


Therefore, we have to identify a byte that serves as a thrustworthy opcode that is unlikely to crash if it is executed. One opcode that immediately comes to mind is the opcode 0xC3, which is the RET instruction which will return execution to the calling program, as such being quite harmless. Based on the input constraints and length check, we determine that the maximum length of the input string is 30. So we can sort of brute force our way to ensure the output byte is always C3. Eventually, you will end up with the following bytes, which all appear within ASCII range.
input = "\x73\x65\x65\x20\x74\x68\x72\x65\x65\x2x\x20\x43"
input += "\x33\x20\x43\x33\x20\x43\x33\x20\x43\x33\x20\x43"
input += "\x33\x20\x43\x33\x20\x43\x33\x21\x20\x58\x44"
