#include <stdio.h>int main(){
        unsigned int random;
        random = rand();// random value!unsigned int key=0;
        scanf("%d", &key);

        if( (key ^ random) == 0xdeadbeef ){
                printf("Good!\\n");
                system("/bin/cat flag");
                return 0;
        }

        printf("Wrong, maybe you should try 2^32 cases.\\n");
        return 0;
}

오오 드디어 쉬운 문제인가 !! 싶었다.

코드가 너무나도 단순했기에 너무 설레는 마음으로 문제풀기를 시작했다.

scanf 를 통해 key 값을 할당 받는다.

random 값은 rand(); 함수로 랜덤값을 넣는다.

그렇게 Key 값과 random 을 연산하여 참이 되면 플래그를 출력하는 문제다.

드림핵에서 canary 강의를 보며 따라했던 방식처럼 임의적으로 바뀌는 랜덤값을 찾은 후 넣으면 되지 않을까 생각을 했다.

일단 rand() 함수에서 어떤 형식으로 값들이 이루어지는 찾아봤다.

https://hijuworld.tistory.com/66

이걸 보고 선린에서 rand 함수를 통해 풀었던 문제가 떠올랐다.

위에 글에서도 나와있지만

rand 함수는 한번 지정된 랜덤값이 지속적으로 출력 된다.

즉 프로그램을 한번 시작한 이상 몇번을 실행하든 같은 랜덤값이 배정된다.

이를 방지하려면 srand 함수를 사용하면 된다.

아무튼 해당 문제의 핵심은 랜덤값은 정해져 있다는 것이다.!

gdb를 통해 랜덤값을 뜯어보고 이 값을 가지고 key 와 연산한 결과를 출력하면 될 것이다 !

pwndbg를 통해 까보자 !