문제이름이 lotto네요.
계속 도박에 관련된 문제를 풀고 있습니다.
우선 코드를 볼까요?
코드가 길기때문에 play함수부터 확인해봅시다.
6바이트의 로또를 입력하라고 출력하고 fflush함수로 바이트를 지웁니다.
read를 통해서 submit을 입력하고
lotto가 실행이 되면 lotto 번호를 생성하고 open함수로 "/dev/urandom"을 읽기 전용으로 엽니다.
if문으로 fd가 1이라면 error를 출력하고
양수형 문자 lotto 6바이트를 선언하고 lotto와 6바이트와 6이 다르다면 error를 출력합니다.
for문을 통해서 숫자를 1 ~ 45로 제한합니다.
밑에 이중for문에서는 lotto와 submit이 같아면 match를 증가시키도
match가 6이되면 flag를 얻을수 있는 문제입니다.
help함수를 보면 룰에 대해서 설명하고 사이트가 있는데 진짜 로또 사이트를 주네요;;
마지막으로 main함수를 보면
while문을 통해서 선택지를 고르는만드는것 같네요.
이제 코드해석을 보고 문제를 풀어볼까요??
match가 6이 되어야 flag를 얻을 수 있는데 match를 6으로 만드는 for문을 보면
이중for문이라 36번을 돌리네요. 그러면 match는 알아서 6이 되겠죠 풀어봅시다.
엥?? 문제가 풀리지 않네요...
다시 코드를 봅시다.
play함수를 자세히 보시면 lotto가 int가 아니라 char이네요.
그러면 아스키 코드를 통해서 1을 !로 바꾸고 입력해 보겠습니다.
flag가 나왔습니다!!! 하하하
flag도 확률적으로 나와서 많이 도전을 해야합니다.
'pwnable.kr 문제풀이' 카테고리의 다른 글
pwnable.kr cmd2 문제풀이 :: 건듀의 블로그 (0) | 2019.09.20 |
---|---|
pwnable.kr cmd1 문제풀이 :: 건듀의 블로그 (0) | 2019.09.20 |
pwnable.kr blackjack 문제풀이 :: 건듀의 블로그 (0) | 2019.09.20 |
pwnable.kr coin1 문제풀이 :: 건듀의 블로그 (0) | 2019.09.20 |
pwnable.kr asm 문제풀이 :: 건듀의 블로그 (0) | 2019.09.18 |