Self-Improvement

[pwnable.kr] random 풀이 본문

리버싱 기초/pwnable.kr

[pwnable.kr] random 풀이

JoGeun 2020. 6. 22. 17:28

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;
}
cs

rand() 함수로 랜덤하게 값을 생성해주지만 seed() 없이는 동일한 값이 출력된다.

그 다음 입력한 값과 random을 XOR 연산하여 0xdeadbeef(3735928559)와 비교하여 맞으면 flag를 출력한다.

 

random 값은 0x6B8B4567(1804289383)이고 입력한 값과 XOR 연산을 함으로 0xdeadbeef(3735928559)와 0x6B8B4567(1804289383)을 XOR 연산하면 flag를 읽는 입력값을 알 수있다.

0xdeadbeef XOR 0x6B8B4567 = B526FB88(3039230856)

 

입력값으로 3039230856을 주면 해결!