[pwnable.kr] coin1 풀이

2021. 3. 21. 09:33·Write-Up/pwnable.kr
반응형

당신은 당신의 손에 약간의 금화를 주었습니다.
그러나 그것들중 하나의 위조지폐가 있다.
가짜 동전은 진짜 동전과 똑같이 생겼다.
그러나 그것의 무게는 실제와 다르다.
진짜 동전은 무게가 10이고, 위조 동전은 무게가 9이다.
저울로 위조지폐를 찾는 것을 도와줘.
위조지폐 100개를 발견하면 포상금을 드립니다:)
파이, 60초 남았어.

- 게임 방법 -
1. 동전 수(N)와 기회 수(C)를 받습니다.
2. 그런 다음 무게를 측정할 동전의 색인 번호 집합을 지정합니다.
3. 체중 정보를 얻습니다.
4. 2~3회 C시간 반복하면 답이 나온다.

- 예 -
[서버] N=4 C=2 #2 시험판 2개 동전 4개 중 위폐 찾기
[고객] 01 # 무게 1동전과 2동전
[서버] 20 # 스케일 결과 : 20
[고객] 3 # 무게 4동전
[서버] 10 # 스케일 결과 : 10
[고객] 2위 위조지폐 3위!
[서버] 정답!

- 준비됐나요? - 3초 후에... -

위조지폐찾기

진짜 동전무게 = 10

위조 동전무게 = 9

N=동전수  C=기회

N을 던지면 N+1의 무게를 알려준다.

A B C D E를 던지면 총 무게합을 알려줘서 10의 배수가 안되면 그 구간에 가짜 동전이 있다는것으로 판별된다.

 

from pwn import *

context.log_level = "debug"

def init_data():
    p.recvuntil("N=")
    N = int(p.recvuntil(" "))
    p.recvuntil("C=")
    C = int(p.recvuntil("\n"))

    return N, C


def BinarySearch(N_list, C):
    lower = 0
    upper = len(N_list) - 1
    count = C
    
    while lower < upper:
        middle = (lower+upper)/2
        payload = "".join([str(_)+str(" ") for _ in N_list[lower:middle+1]])
        p.sendline(payload)
        count = count - 1 
        
        log.info("send data : "+payload)
        log.info("chance    : "+str(count))

        if int(p.recvuntil("\n")) == (len(N_list[lower:middle+1]) * 10) :
            lower = middle + 1
        else:
            upper = middle

        if lower == upper:
            find_data = lower
            
    for c in range(count+1):
        p.sendline(str(find_data))

    

p = remote("pwnable.kr", 9007)
p.recvuntil("sec... -\n\t\n")

coin = 0

while coin < 100:
    N, C = init_data()
    N_list = [data for data in range(N)]

    log.info("N="+str(N)+", C="+str(C))
    BinarySearch(N_list, C)
    coin = coin + 1


p.interactive()

코드는 참고했다. rninche01.tistory.com/entry/pwnablekr-coin1

 

 

b1NaRy_S34rch1nG_1s_3asy_p3asy

 

 

반응형

'Write-Up > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] lotto 풀이  (0) 2021.03.24
[pwnable.kr] blackjack 풀이  (0) 2021.03.24
[pwnable.kr] shellshock 풀이  (0) 2021.03.21
[pwnable.kr] leg 풀이  (0) 2021.03.20
[pwnable.kr] flag 풀이  (0) 2021.03.19
'Write-Up/pwnable.kr' 카테고리의 다른 글
  • [pwnable.kr] lotto 풀이
  • [pwnable.kr] blackjack 풀이
  • [pwnable.kr] shellshock 풀이
  • [pwnable.kr] leg 풀이
Penguin Dev
Penguin Dev
What does the Penguin say?
    글쓰기 관리
  • Penguin Dev
    Pengha!
    Penguin Dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (150) N
      • Java & Spring (2) N
      • System Hacking (4)
      • Algorithm (8)
        • Sorting algorithm (3)
      • Python (6)
      • DB (1)
      • Web (2)
        • Web Hacking & Security (2)
      • Write-Up (108)
        • pwnable.kr (17)
        • HackCTF (16)
        • 해커스쿨 FTZ (21)
        • LOB(lord of bufferoverflow) (19)
        • LOS (lord of sql injection) (28)
        • XSS-game (6)
        • Webhacking.kr (1)
      • SUA (19)
        • 오픈소스 보안 (19)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nop sled
    Java
    LOB
    코딩테스트
    DB정리
    CountDownLatch
    sqlinjection
    Hashtable
    시스템해킹
    spring boot
    HashMap
    enumerate #list comprehension
    tabat
    lord of bufferoverflow
    Lock
    selection sort
    코드트리
    spring
    putval()
    동시성처리
    동시성
    hashmap vs concurrenthashmap
    Bubble Sort
    concurrenthashmap vs hashmap
    코드트리조별과제
    thread-safe
    AtomicLong
    ConcurrentHashMap
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
Penguin Dev
[pwnable.kr] coin1 풀이
상단으로

티스토리툴바