반응형
random 문제를 풀어보자.
첫 번째 fd 문제와 동일하게 1pt 짜리 문제이다.
실제로도 크게 어렵지 않은 문제였다.
문제를 살펴보자.
역시나 세 개의 파일이 존재한다.
소스코드를 보자.
rand() 함수를 이용해 랜덤값을 만들어 random 변수에 저장하고
scanf() 로 입력받은 값과 xor 연산을 해서
연산 결과가 0xdeadbeef 이면 flag 를 출력한다.
이 문제를 풀 때 알아야 할 것이 하나 있는데,
rand() 함수는 프로그램이 실행될 때 값이 정해진다.
즉 프로그램을 여러번 실행시켜도 동일한 값이 나온다는 것이다.
프로그램 실행 시 매번 다른 난수를 얻고 싶다면 srand() 함수를 사용해야 한다.
그럼 우리는 rand() 함수를 실행시킨 뒤 해당 값을 알아내기만 하면 끝이다.
역시나 gdb 로 까보자.
rand() 함수가 실행되고 나서 rand() 의 return 값을 받아오는 부분에
BP를 걸고 실행시킨 후 eax 레지스터를 살펴보면 되겠다.
0x6b8b4567 이라는 값이 들어있는 것을 확인할 수 있다.
우리는 key ^ random == 0xdeadbeef 조건을 만족시켜야 한다.
key == 0xdeadbeef ^ random 이다.
해당 xor 연산은 python 을 이용했다.
3039230856 이 값을 입력해보자.
flag 획득 !
728x90
반응형