풀이
다음은 random.c의 코드이다.
#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;
}
언뜻 보면, random 값은 맨날 바뀌어 정말로 $2^{32}$번의 연산을 해야 하는 듯 보이지만, 과연 그럴까?
결론부터 말하자면, random 값은 바뀌지 않는다.
random 값에 뭐가 들어가나 확인해보고 XOR 연산을 수행하면 간단하게 key 값을 맞출 수 있을 것이다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] leg 풀이 (2pt) (0) | 2020.07.20 |
---|---|
[Pwnable.kr] input2 풀이 (4pt) (0) | 2020.07.20 |
[Pwnable.kr] passcode 풀이 (10pt) (0) | 2020.07.19 |
[Pwnable.kr] flag 풀이 (7pt) (0) | 2020.07.19 |
[Pwnable.kr] bof 풀이 (5pt) (0) | 2020.07.19 |