Wellington was a reverse engineering challenge at Boston Key Party 2015.
If you had the code, you'd see that the program is calling `decrypt("[QeZag^VQZShWQgeWVQSe]ZW^^Q[`efWSV", X). Unfortunately, you don't have it, HAHAHAHAHAHA. Ho, and by the way, the flag ends with a dot.
The given file "troll_log.4643d195d55746aa180abf7144909677" is an ELF 64-bit binary.
After inspecting its content with an hexadecimal editor we can assert that this is a compiled Perl Prolog script.
The application is calling the
read function to prompt the password. We can assume it's using
strcmp to compare the user input with the good password.
Library call tracing
Static analysis of the file would take a lot of time. The quickest way to solve the challenge is probably to trace system calls.
We can use
ltrace to intercept the dynamic library calls.
ltrace -s 64 ./troll_log.4643d195d55746aa180abf7144909677
The previous command will output a bunch of system calls until it reaches the read function. Then we can type a dummy password like "X." and press enter. Then the application will continue until exit.
If you pay attention to the output of the
ltrace you probably already see the flag.
strcmp function is called a more than 200 times against the flag and several strings.
strcmp("LOSE", "i_should_have_used_askhell_instead") = -29
strcmp("SIGABRT", "i_should_have_used_askhell_instead") = -22
strcmp("SIGALRM", "i_should_have_used_askhell_instead") = -22