pwnable.kr (coin1)

c0wb3ll ㅣ 2020. 12. 21. 22:43

pwnable.kr (coin1)

무언가 했더니 가짜동전찾기 알고리즘을 사용하는 코딩 문제였다. 최근 학교 수업에서 이론으로만 들었던 수업인데 쓸 시간이 온 것 같다.

from pwn import *

context.log_level = 'debug'

def get_N():
    N = int(p.recvuntil(' ').decode()[2:-1])
    p.recv()
    return N

def coin_detect(start, N):
    inpN = ''

    for i in range(int(start), int((start+N)/2)):
        inpN += (str(i) + ' ')

    if inpN == '':
        inpN == N-1

    p.sendline(inpN)
    weigh = p.recv().decode()

    if weigh[-2] == '9':
        return coin_detect(start,int((start+N)/2+1))
    elif weigh[-2] == '0':
        return coin_detect(int((start+N)/2), N)
    else:
        return

p = remote('pwnable.kr', 9007)

p.recv()

while(1):
    coin_detect(0, get_N())

위 코드를 돌렸는데 시간 제한에 걸려 time expired! 라는 문구를 준다...

그래서 어쩌지 하다가 문제를 보니 서버 응답이 느리다면 pwnable.kr서버 내에서 nc 0 9007을 이용해서 돌리라고 한다.

그래서 저번에 input2 문제에서 tmp폴더 안에 c0wb3ll폴더를 남겨둔것이 생각나 그곳에다 python파일을 옮겨주고 돌려보기로 했다.

from pwn import *

context.log_level = 'debug'

def get_N():
    N = int(p.recvuntil(' ').decode()[2:-1])
    p.recv()
    return N

def coin_detect(start, N):
    inpN = ''

    for i in range(int(start), int((start+N)/2)):
        inpN += (str(i) + ' ')

    if inpN == '':
        inpN == N-1

    p.sendline(inpN)
    weigh = p.recv().decode()

    if weigh[-2] == '9':
        return coin_detect(start,int((start+N)/2+1))
    elif weigh[-2] == '0':
        return coin_detect(int((start+N)/2), N)
    else:
        return

p = remote('localhost', 9007)

p.recv()

while(1):
    coin_detect(0, get_N())

코드는 위와 같이 바꾼 뒤 올렸다. 사실 remote('localhost', 9007)로 바꾼 것 밖에 없다.