[Pwnable.kr] coin1

Netcat으로 접속을 해보면 위와 같은 간단한 게임을 볼 수 있습니다. binary search를 통해서 가짜 코인을 골라내면 되고, 아마 2^C >= N 임은 보장될 것입니다.(아닐 경우 가짜 코인을 판별해낼 수 없으므로)

코드는 아래와 같습니다. python 3 버전에 맞추어짰는데 python 2에서도 실행은 잘 됐습니다. 외부에서 pwnable.kr / 9007 로 접속해서 돌렸더니 계속 100번까지 가지 못하고 80번대에서 시간 초과가 떠서 어쩔 수 없이 pwnable.kr 내부에서 풀었습니다. 이 때 주소는 127.0.0.1로 변경해야 합니다.

import socket                                                                 
import sys                                                                    
import re                                                                     
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                      
server_address = ('pwnable.kr', 9007)                                          
sock.connect(server_address)                                                  
data = sock.recv(2048).decode()
print(data)

for i in range(100):
  print(str(i)+"-th")
  data = sock.recv(1000).decode()
  arr = re.findall("\d+", data)
  count = int(arr[-1])                                                  
  number = int(arr[-2])                                                 
  low = 0                                                               
  high = number
  print(count, number)
  for i in range(count):
    mid = (low+high)//2
    send = ""
    for j in range(low, mid+1): send += str(j)+" "
    send += "\n"
    sock.send(send.encode())
    data = sock.recv(100).decode()
    result = int(data)
    if result % 10 == 0:
      low = mid + 1
    else:
      high = mid


  sock.send((str(low)+"\n").encode())
  print(sock.recv(100).decode())

data = sock.recv(100).decode()                                
print(data)

'워게임 > Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] cmd1  (0) 2018.01.15
[Pwnable.kr] lotto  (0) 2018.01.15
[Pwnable.kr] blackjack  (0) 2018.01.15
[Pwnable.kr] shellshock  (0) 2018.01.15
[Pwnable.kr] mistake  (0) 2018.01.15
[Pwnable.kr] leg  (0) 2018.01.15
  Comments