모각코(코딩스터디)

2026-01-24 동계모각코 4차 회고

mincom1224 2026. 1. 24. 15:47

오늘은 pwntool에 대해 알아보았다.

우선 오늘의 예제 문제는

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
  int i, a, b, ans;
  srand(time(0));

  for (i = 0; i < 100; i++) {
    a = rand() % 20000;
    b = rand() % 20000;
    printf("#%d: %d + %d = ?\n", i, a, b);
    printf("> ");
    scanf("%d", &ans);
    if (a + b == ans) {
      printf("Correct!\n");
    }
    else {
      printf("Wrong!\n");
      return 0;
    }
  }
  printf("Congrats! flag{welcome_to_pwntools}");
}

오늘의 예제 문제는 덧셈뺄셈 100문제를 풀이 하면 문제가 풀리는 워게임을 풀었다.

당연히 손수 100문제를 다풀면 시간이 무척 오래 걸리지만 pwntool를 활용하여 문제를 풀면 되게 간단하게 문제를 풀수있다.

from pwn import *

# ./test 를 실행시킨다.
r = process("./plusminus")

# 총 100번 반복한다.
for i in range(100):

    # 몇번째 문제인지 표시
    print("Solving " + str(i))

    # 문제의 숫자 앞까지 읽어들이기
    r.recvuntil(":")

    # + 앞까지 읽어서 첫번째 항 숫자 읽어들이기
    rawa = r.recvuntil("+")[:-1]
    a = int(rawa)

    # = 앞까지 읽어서 두번째 항 숫자 읽어들이기
    rawb = r.recvuntil("=")[:-1]
    b = int(rawb)

    # 답을 구함
    ans = a + b

        # 답을 프로그램에 입력시킴
    r.sendline(str(ans))

    # Correct! 문자열 읽어줌
    r.recvuntil("Correct!\n")

# 다 끝나면 interactive() 로 제어를 넘겨받음
r.interactive()

오늘 직접 pwntool를 사용해보며 물론 내가 직접 입력하여 워게임문제를 풀수도 있지만 간단하게 코드를 작성하여 풀 수 있다는 점이 굉장히 매력적으로 다가왔고 pwntool공부의 시작점이 되었다.

다음부터이는 이 pwntool를 활용하여 풀다만 rop문제의 파이썬 정답코드를 쓰고자 한다.