cgy12306
[pwnable.kr ] coin1 본문
[coin1]
nc로 pwnable.kr 9007에 접속해보면 다음과 같이 뜬다.
60초안에 100개의 가짜 코인을 찾으면 상을 준다고 한다.
N개의 코인이 주어지는데 C번의 횟수안에 가짜 코인을 찾아야 한다.
코인 한개당 무게가 10이 나가는데 가짜 코인은 9가 나온다.
index번째 코인을 여러개 입력하면 무게의 총합을 알려준다.
술게임 Up & Down 하는기분..
입력할 수 있는 횟수의 제한도 있고, 하나씩 입력하게 되면 시간상의 문제가 발생한다.
그래서 절반씩 나눠서 입력하기로 했다.(나중에 알고보니 이진탐색 기법이라고 한다.)
from pwn import *
import time
r = remote('pwnable.kr', 9007)
sleep(3.1)
r.recvuntil('- Ready? starting in 3 sec...')
for j in range(100):
r.recvuntil('N=')
N = int(r.recvuntil(" "))
r.recvuntil('C=')
C = int(r.recvuntil("\n"))
print "N : " + str(N), "C : " + str(C)
start = 0
finish = N
middle = (start + finish)/2
while C>=0:
print "start : "+ str(start), "middle : "+ str(middle), "finish : " +str(finish)
payload =""
for i in range(start, middle+1):
payload += str(i) + " "
r.sendline(payload)
res = r.recv()
if "Correct!" in res:
break
weight = int(res)
print "weight: " + str(weight)
if weight % 10 == 9:
finish = middle
else:
start = middle + 1
middle = (start+finish)/2
C-=1
r.interactive()
로컬 환경에서 돌리면 오래걸리기 때문에 time expired! bye!가 뜬다.
ssh로 전에 풀었던 아무데나 접속해서 해당 코드를 돌려보면 풀리게 된다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] lotto (0) | 2020.01.27 |
---|---|
[pwnable.kr] blackjack (0) | 2020.01.27 |
[pwnable.kr] input (0) | 2020.01.26 |
[pwnable.kr] random (0) | 2020.01.26 |
[pwnable.kr] passcode (0) | 2020.01.26 |
Comments