리버싱 기초/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을 주면 해결!