Self-Improvement
[pwnable.kr] random 풀이 본문
소스코드
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을 주면 해결!
'리버싱 기초 > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] mistake 풀이 (연산자 순위) (0) | 2020.06.23 |
---|---|
[pwnable.kr] input 풀이 (pwntools process executable!!) (0) | 2020.06.23 |
[pwnable.kr] passcode 풀이 (scanf() 함수 취약점) (0) | 2020.06.22 |
[pwnable.kr] flag 풀이 (0) | 2020.06.22 |
[pwnable.kr] bof 풀이 (0) | 2020.06.22 |