해설
random.c를 확인해보면 다음과 같다.

rand 함수를 사용해 random 값을 가져오고 이를 사용자가 입력한 key 값과 xor 연산한 뒤, 0xdeadbeef와 비교한다.
이런, 이 코드에선 srand 함수를 사용하지 않았다. rand 함수는 시드 값에 따라 결정 되는 '유사 난수열'을 생성해주는 함수이다. 절대 난수가 아니다. 따라서 srand 없이는 매 번 같은 순서의 숫자를 얻게 된다.
따라서 위의 rand()의 결과인 random의 값을 gdb를 통해 확인하고, xor 연산 시 0xdeadbeef가 되도록 하는 key 값을 입력하면 될 것 같다.

확인해 본 결과 random에는 0x6b8b4567이라는 값이 할당 된다. key ^ 0x6b8b4567 = 0xdeadbeef가 되야 하므로 key = 0x6b8b4567 ^ 0xdeadbeef = 0xb526fb88 이다. 다음과 같이 입력해주면 flag 값을 얻을 수 있다.

'pwn' 카테고리의 다른 글
| pwnable.kr - input (0) | 2019.08.26 |
|---|---|
| pwnable.kr - passcode (0) | 2019.08.22 |
| pwnable.kr - flag (0) | 2019.08.13 |
| pwnable.kr - bof (0) | 2019.08.12 |
| pwnable.kr - collision (0) | 2019.08.10 |