이 문제 같은 경우에는 소켓통신을 통한 간단한 숫자 게임이였습니다.
간단히 룰을 설명하면 가장 작은 숫자나 가장 큰 숫자를 찾아서 데이터값을 보내주면 다음으로 진행하는 방식이였습니다.
이걸 풀기 위해, 데이터 값을 받았을 떄 max나 min이 데이터 안에 들어있다면 Sorting을 통해서 정렬하여 첫번째 값을 보내주면 끝나겠죠.
아래는 파이썬으로 간단히 만들어본 소스입니다.
from socket import * sock = socket(AF_INET,SOCK_STREAM) sock.connect(('number.quals.seccon.jp',31337)) i=1 while True: data = sock.recv(2048) data_list=data.split('\n') splited= data_list[0].split(', ') print i, 'Attempt...' print "list :: " , len(splited) , "\n" print splited , "\n" if 'max' in data_list[1]: for i in range(0,len(splited)): for k in range(0,len(splited)): if(int(splited[i]) >= int(splited[k])): temp = splited[i] splited[i] = splited[k] splited[k] = temp sender = splited[0] print data_list[1] + sender , "\n" elif 'min' in data_list[1]: for i in range(0,len(splited)): for k in range(0,len(splited)): if(int(splited[i]) <= int(splited[k])): temp = splited[i] splited[i] = splited[k] splited[k] = temp sender = splited[0] print data_list[1] + sender , "\n" elif 'Congra' in data_list[1]: sock.send(sender)
if sock.send(sender): i+=1
sock.close() |
이렇게 하시면 값을 얻을 수 있게 됩니당.
'Write up' 카테고리의 다른 글
[dctf 2020] writeup (0) | 2020.12.10 |
---|---|
Write up (0) | 2014.10.04 |