# cat blog >> /dev/brain 2> /proc/mind
cat blog >> /dev/brain 2> /proc/mind
# cat game.py #!/usr/bin/python from sys import argv, exit from re import sub from netlib import sc def nextpos(r, c): if c < C - 1: c += 1 elif r < R - 1: r += 1 c = 0 else: r += 1 return r, c def strike(board, row, column, solution, figures): b = board s = solution f = figures strike = False i = column left = [0, 0, 0] while left[2] == 0 and 0 < i <= column: i -= 1 left[0] = row left[1] = i left[2] = b[row][i] i = column right = [0, 0, 0] while right[2] == 0 and column <= i < C - 1: i += 1 right[0] = row right[1] = i right[2] = b[row][i] i = row up = [0, 0, 0] while up[2] == 0 and 0 < i <= row: i -= 1 up[0] = i up[1] = column up[2] = b[i][column] i = row down = [0, 0, 0] while down[2] == 0 and row <= i < R - 1: i += 1 down[0] = i down[1] = column down[2] = b[i][column] if left[2] != 0 and (left[2] == up[2] or left[2] == right[2] or left[2] == down[2]): b[left[0]][left[1]] = 0 f -= 1 strike = True if up[2] != 0 and (up[2] == right[2] or up[2] == down[2] or up[2] == left[2]): b[up[0]][up[1]] = 0 f -= 1 strike = True if right[2] != 0 and (right[2] == down[2] or right[2] == left[2] or right[2] == up[2]): b[right[0]][right[1]] = 0 f -= 1 strike = True if down[2] != 0 and (down[2] == left[2] or down[2] == up[2] or down[2] == right[2]): b[down[0]][down[1]] = 0 f -= 1 strike = True if strike: s.append((row, column)) game(b, 0, 0, s, f) def send(solution, board): global sc s = '' for coordinate in solution: s += '(' + str(coordinate[0]) + ',' + str(coordinate[1]) + ');' print s if sc.send(s + '\n') == False: exit() data = sc.recv(buffsize, timeout) print data exit() def game(board, row, column, solution, figures): while row < R: #is solution if figures == 0: send(solution, board); #is not a solution elif board[row][column] == 0: strike(board, row, column, solution, figures) row, column = nextpos(row, column) def count(board): f = 0 for r in board: for c in r: if c != 0: f += 1 return f buffsize = 4096 max_retries = 2 pause = 0.5 timeout = 2 ip = argv[1] port = argv[2] C = 10 R = 20 solution = [] sc = sc(ip, port, 'tcp') if sc.connect(max_retries, pause): sc.recv(buffsize, timeout) data = sc.recv(buffsize, timeout) print data data = data[28:-15].split('\n') board = [] for line in data: line = line[3:] line = sub(r"1b5b306d|1b5b|6d30", "", line.encode('hex')) line = sub(r"20", "0,", line) line = sub(r"3331", "1,", line) line = sub(r"3332", "2,", line) line = sub(r"3333", "3,", line) line = sub(r"3334", "4,", line) line = sub(r"3336", "6,", line) line = sub(r"3337", "7,", line) line = [ int(char) for char in line[:-1].split(',')] board.append(line) game(board, 0, 0, solution, count(board)) # ./game.py hackyou2014tasks.ctf.su 9876 0123456789 ----------- 0| 00 00 1| 0 000 2|0 0 0 0 3| 00 00 0 4|000 000 5| 00000 6| 0 000 7|0 000 0 8|0 00 0 00 9|0 0 0 0 0 10|00 0 0 0 11|00000 0 12|0 0 0 0 13| 0 0000 14| 0 00 0 0 15| 0 00000 16| 0 0 0 0 17| 00 0 00 0 18|0 0 000 19|000 00 0 ############# (2,2);(2,3);(2,0);(2,2);(0,8);(3,3);(3,2);(3,3);(4,3);(1,3);(1,0);(1,0);(3,1);(0,9);(4,4);(4,5);(6,5);(6,1);(6,2);(7,2);(7,6);(6,8);(8,6);(9,1);(9,1);(5,0);(9,5);(9,0);(11,2);(11,2);(10,2);(11,4);(12,1);(12,6);(13,1);(13,4);(13,0);(14,0);(13,3);(14,8);(15,1);(16,2);(14,4);(17,5);(17,6);(17,1);(15,9);(15,7);(15,8);(16,9); You win! CTF{0a10f3f9e37d18c39e017ec8bbd5d2ea}
cat game.py
./game.py hackyou2014tasks.ctf.su 9876
Post a Comment
No comments:
Post a Comment