[pwnable.kr] coin1 - 6 pt
코인 문제당...
게임! 플레이! 예이!
실행하면 아래와 같은 문자열이 나온다. 게임을 어떻게하는지 설명해주는 것같다.
--------------------------------------------------- - Shall we play a game? - ---------------------------------------------------
You have given some gold coins in your hand however, there is one counterfeit coin among them counterfeit coin looks exactly same as real coin however, its weight is different from real one real coin weighs 10, counterfeit coin weighes 9 help me to find the counterfeit coin with a scale if you find 100 counterfeit coins, you will get reward :) FYI, you have 30 seconds.
- How to play - 1. you get a number of coins (N) and number of chances (C) 2. then you specify a set of index numbers of coins to be weighed 3. you get the weight information 4. 2~3 repeats C time, then you give the answer
- Example - [Server] N=4 C=2 # find counterfeit among 4 coins with 2 trial [Client] 0 1 # weigh first and second coin [Server] 20 # scale result : 20 [Client] 3 # weigh fourth coin [Server] 10 # scale result : 10 [Client] 2 # counterfeit coin is third! [Server] Correct! - Ready? starting in 3 sec... -
N=919 C=10 time expired! bye!
|
핰... 번역해보니 꽤나 재미있는 내용이다.
나에게 골드가 어느정도 있고, 그 중 하나가 위조골드라고 한다. (편의상 가짜골드라고 하겠다.)
그런데 이 가짜골드는 무게가 진짜골드랑 다르다고하는데, 진짜 골드의 무게가 10이라면 가짜골드는 9이다.
시간은 30초 주겠고, 100개의 가짜골드를 찾아준다면 상을 주겠다고 한다.
어떻게 플레이하는지는 직접 읽자.. 영어를 조금만 한다면 번역가능하다.
그런데 N=900정도로 주어지는데 예시를 보면 동전인덱스를 하나하나 입력하므로.... 코딩해서 풀어야할 것 같다. 그것도 소켓프로그래밍....
이라고 할 줄 알았지만! pwntools라는 멋진 툴이 존재하므로 그것을 이용하겠다!
굿!!!
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 47 48 49 | #!/usr/bin/env python from pwn import * import string conn = remote('pwnable.kr', 9007) conn.recvuntil("- Ready? starting in 3 sec... -") cnt_fake = 0 while(cnt_fake<100): conn.recvuntil("=") N = int(conn.recvuntil(" ").strip()) conn.recvuntil("=") C = int(conn.recvline().strip()) #print("Problem : N=%d C=%d" % (N,C)) left = 0 right = N mid = (left+right+1) // 2 cnt = 0 for c in range(C+1): coins = "" for i in range(left, mid): coins += str(i)+" " conn.sendline(coins) if(c==C): break weight = int(conn.recvline().strip()) real_weight = (mid-left)*10 if(real_weight == weight): left = mid mid = (left+right+1) // 2 elif(weight == 9): cnt = C-c break else: right = mid mid = (left+right+1) // 2 for i in range(cnt): conn.sendline(coins) print(conn.recvuntil("Correct!")), print(conn.recvline()) cnt_fake+=1 conn.interactive() | cs |
'Wargame > Pwnable.kr' 카테고리의 다른 글
[pwnable.kr] echo1 - 25 pt (Only ROP!!) (0) | 2018.05.27 |
---|---|
[pwnable.kr] echo1 - 25 pt (0) | 2018.05.26 |
[pwnable.kr] flag - 7 pt (0) | 2018.05.14 |
[pwnable.kr] input - 4 pt (0) | 2018.05.10 |
[pwnable.kr] lotto - 2 pt (0) | 2018.05.10 |