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 프로그램에 입력하였습니다.