NC로 접속을 해보면 위처럼 나온다. 위조된 동전을 찾으면된다.
실제 동전의 무게는 10이고 위조된 동전은 9라는 값이 나오게된다.
총 100개의 위조 동전을 찾으면 되는데 제한시간이 30초다. 코딩을해야한다.
알고리즘을 하나 사용하는데 binary search를 이용하면 풀 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # -*- coding: utf-8 -*- import time import socket def search(num, count): first = 0 last = num-1 for x in range(count+1): mid = (first+last)/2 data = " ".join([str(x) for x in range(first, mid+1)]) s.sendall(data+"\n") data2 = s.recv(1024) if len(data2) == 0: data2 = s.recv(1024) if "Correct!" in data2: print data2 break data3 = int(data2) if data3 != (mid-first+1)*10: last = mid else: first = mid+1 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("pwnable.kr", 9007)) lines = s.recv(512).splitlines() print lines time.sleep(1) s.recv(1024) time.sleep(3) for x in range(1): data1 = s.recv(100) print data1 data1 = data1.split(" ") num = data1[0].replace("N=", "").replace(" ", "") cnt = data1[1].replace("C=", "").replace(" ", "") search(int(num), int(cnt)) print s.recv(1024) | cs |
변수가 많이 필요했는데 변수 명 때문에 헷갈려서 시간 날렸다
'WARGAME > Pwnable.kr' 카테고리의 다른 글
pwnable.kr fix (0) | 2017.01.12 |
---|---|
pwnable.kr dragon (0) | 2017.01.11 |
pwnable.kr simple login (0) | 2017.01.06 |
pwnable.kr passcode (0) | 2016.03.29 |
PWNABLE KR ascii_easy (0) | 2016.03.28 |