Pwnable.kr

random

amoogotomollayo 2022. 3. 30. 23:20

 

#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 함수로 생성한 랜덤 값과 xor 연산한 값이 0xdeadbeef라면 FLAG를 출력합니다.

 

rand 함수 경우 프로그램이 생성될 때 값이 정해집니다. 그래서 srand 함수를 이용해 rand 함수의 값을 바꿀 수 있습니다.

해당 프로그램은 seed 값이 따로 설정되지 않아 일정한 값이 반복됩니다.

 

그래서 따로 파일을 만들어서 rand 함수의 처음 랜덤 값을 확인 후 0xDEADBEEF와 xor연산을 하면 정답을 구할 수 있습니다.

 

코드와 결과는 아래와 같습니다.

#include<stdio.h>
#include<stdlib.h>

int main(){
	int a = rand();
	printf("%d\n", a);
}

해당 프로그램을 실행하니 1804289383을 출력하였습니다.

해당 값을 0xDEADBEEF와 xor 연산된 값을 random 프로그램에 입력하였습니다.