본문 바로가기

Pwnable.kr

Pwnable.kr [random]

#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