This challenge is a game running on a server. There is no visibility into the actual code. Connecting shows something like this:
You have gotten 0 of 75 Choice 1 = dcccc1a3bb57e46e14f9c0afec8dd44d0a Choice 2 = 9c5e5fc288d10eaec7e4086dc1b074fd53 Which one is bigger? (1 or 2)
It is seemingly random which is actually bigger, so it is probably a hash of some kind. If you automate playing, you will see there are only 500 unique values, so we can build a bot that can learn the correct answers.
The following script learns the ordering of the items and wins the game:
#!/usr/bin/env python import socket history = [] def read(s): result = "" while True: ch = s.recv(1) if ch == "\n": # print result return result result += ch def before(a, b): global order if (a in order) and (b in order): if order.index(a) < order.index(b): return order.remove(a) order.insert(order.index(b), a) return if a in order: order.insert(order.index(a) + 1, b) return if b in order: order.insert(order.index(b), a) return order.insert(0, a) order.append(b) def valid(first, second, i): global order global history if i == 1: history.append([second, first]) before(second, first) else: history.append([first, second]) before(first, second) def guess(first, second): global order if (first in order) and (second in order): if order.index(first) < order.index(second): return 2 return 1 if first in order: if order.index(first) < (len(order) / 2): return 2 return 1 if second in order: if order.index(second) < (len(order) / 2): return 1 return 2 return 1 f = open('database', 'r') order = [] for line in f.readlines(): if len(line.strip()) > 0: order.append(line.strip()) f.close() s = socket.create_connection(("184.73.47.70", 6969)) correct = 0 while True: line = read(s) line = read(s) first = line.split('=')[1].strip() line = read(s) second = line.split('=')[1].strip() # print [first, second] i = guess(first, second) read(s) s.send("%d\n" % i) read(s) line = read(s) if line[0:7] == "Correct": correct += 1 print "%d correct" % correct if correct == 75: break valid(first, second, i) else: print "wrong" correct = 0 valid(first, second, 3 - i) for entry in history: before(entry[0], entry[1]) read(s) f = open('database', 'w') for line in order: f.write("%s\n" % line) f.close() while True: print read(s)
The key is given if 75 correct answers are given in a row. It takes a while for the script to learn enough about the item ordering for this to happen. The key is:
d03snt_3v3ry0n3_md5