#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;
}
그냥 간단하다. rand()함수를 호출하지만 srand()를 사용하지 않고,
그럴 경우 srand(1)이 자동으로 할당된다. 즉 seed 1 고정인 상태에서 항상 동일한 시퀀스가 나오는 상황이다.
맨 처음에 소스코드만 보고 잠깐 다른 볼일을 보러 가던 중에
생각해보니, 그럼 seed 1의 첫 rand함수의 값은 유명하지 않을까? 해서 검색해봤는데,
OS에 따라서 다르게 나오기 때문에 그렇지는 않다고 하더라.
그래서 디버깅으로 확인해야지 개인 리눅스에서 확인한 값으로 해봤자 안 됨 ㅋ
연산 필요 지식은 A xor B = C일 때 B xor C = A, A xor C = B가 되기 때문에 값도 바로 알아낼 수 있다.
한줄 더 적자면 B xor C = B xor (A xor B) = B xor (B xor A) = B xor B xor A = 0 xor A = A이다.
'Pwnable.kr' 카테고리의 다른 글
Pwnable.kr [leg] (0) | 2019.05.01 |
---|---|
Pwnable.kr [input] (0) | 2019.04.30 |
Pwanble.kr [passcode] (0) | 2019.04.29 |
Pwnable.kr [bof] (0) | 2019.04.24 |
Pwnable.kr [collision] (0) | 2019.04.24 |